我是第一年的工科学生,我正在完成一个学期末项目。由于截止日期紧迫,我想避免通过图像处理库进行搜索。我们(我的小伙伴)需要找到最简单的可实现方法,以从图像中获取暗像素数的整数。我已经阅读了很多关于图像处理的帖子,但它们比我们需要的要复杂得多。是否有捷径可寻?重要的是它很容易,因为这只是我们项目的一小部分,并且不会有太多时间致力于此。
至于语言,我更喜欢使用C ++。
在旁注中,我们的报告中会引用任何特殊帮助(仅提及您想要引用的名称,并且您将在历史中记录下来)。它也会让我们有时间睡觉。睡觉是给工程师学生什么蛋糕是胖孩子。
答案 0 :(得分:1)
这有两个阶段:
第一阶段并不太难 - 您可以使用预先存在的库,例如DevIL或FreeImage,也可以编写自己的库 - this和{{3应该足以让你开始。
一旦你以某种方式将图像加载到你的程序中,你需要循环像素数据并计算“暗”像素的数量。假设您的图像结构如下所示:
typedef struct
{
int w;
int h;
unsigned char *data;
} image_s;
为简单起见,我们做出以下假设:
RGBRGBRGB
。(R+G+B)/3 < 10
鉴于上述情况,您只需循环遍历图像结构中的每个像素,如下所示:
int count_dark_pixels(image_s *img)
{
int dark_pixels, i;
for (dark_pixels = 0, i = 0; i < img->w * img->h; ++i)
{
int r = img->data[(i*3)+0];
int g = img->data[(i*3)+1];
int b = img->data[(i*3)+2];
if ((r+g+b)/3 < 10) { ++dark_pixels; }
}
return dark_pixels;
}
答案 1 :(得分:1)
这是在Qt中完成的(不是图像处理而是应用程序库)
#include <QImage>
#include <QColor>
uint countDarkPixels(QString filename, quint8 threshold) {
QImage img(filename);
uint darkPixels = 0;
for (int x = 0; x < img.width(); ++x) {
for (int y = 0; y < img.height(); ++y) {
QColor color(img.pixel(x, y));
if (color.toHsl().lightness() < threshold) darkPixels++;
}
}
return darkPixels;
}
除了JPG之外还适用于其他格式。它使用转换为HSL,这可能不是很快,但你说&#34; easy&#34;不是&#34;快&#34;。
答案 2 :(得分:0)
解压缩jpeg,获取Y通道像素数据(这些值是每个像素的亮度),计算其中的暗像素。我不认为您需要U和V通道,这些通道用于重建颜色信息。
使用RGB可能会很痛苦,但这一切都取决于你对黑暗&#39;像素。
答案 3 :(得分:0)
JPEG图像通常使用YCbCr色彩空间进行编码。而不是红色,绿色,蓝色,三个组成部分是黑暗,蓝色和红色。然后,Y分量是彩色图像的黑白版本。
然后,您可以通过检查图像的Y分量的值来确定任何点的暗度。您可以设置一些阈值来确定暗像素。