OpenCV图像灰度化是怎么做的呢

OpenCV图像灰度化是怎么做的呢,第1张

先进行灰度化,IplImage pImg = cvLoadImage( "C:\\1bmp", 0 ); 这样图像已经灰度化,然后调用cvThreshold(image, image, 125, 255, CV_THRESH_BINARY); 就可以了,125那里是你所用的阈值,这就是最简单的二值化,你要用ostu,或者别的高级一点的,就要自己写函数了

void main()

{

IplImage src = cvLoadImage("xxx",1);

int width = src->width;

int height = src->height;

uchar ptr = src->imageData;

int Iij;

double Imax = 0, Imin = 255, Iave = 0, Idelta = 0;

for(int i=0;i<height;i++)

{

for(int j=0;j<width;j++)

{

Iij = (int) ptr[iwidth+j];

if(Iij > Imax)

Imax = Iij;

if(Iij < Imin)

Imin = Iij;

Iave = Iave + Iij;

}

}

Iave = Iave/(widthheight);

for(int i=0;i<height;i++)

{

for(int j=0;j<width;j++)

{

Iij = (int) ptr[iwidth+j];

Idelta = Idelta + (Iij-Iave)(Iij-Iave);

}

}

Idelta = Idelta/(widthheight);

printf("灰度最大值 = %d\n",Imax);

printf("灰度最小值 = %d\n",Imin);

printf("灰度均值 = %d\n",Iave);

printf("灰度方差 = %d\n",Idelta);

return;

}

1cvLoadImage的flag为0读入的就是灰度图,这是强制转换的。如果读入的是彩色图可以通过cvCvtColor转换色彩空间

2某矩形区域可以设置为ROI,这样后续 *** 作只在ROI *** 作

3最亮的部分不是很理解,那部分找出来后你想怎么显示出来?你说的部分是按块还是按像素点?可以通过cvThreshold阈值 *** 作,来找到大于或者小于某阈值的部分,反正像素值越大越亮

打开小画家,将色卡打开,点击吸管工具,移动鼠标到红色块上方,松开鼠标,此时,吸管工具已经提取了红色色块信息。然后点击右方的“编辑颜色”,d出颜色选择对话框,此时,右下角有刚才习惯的红绿蓝颜色信息,如红152,绿18,蓝15。这个就是颜色对应的RGB色彩值。

创建VC控制台工程,加入所需头文件和库文件。注意要事先将opencv 头文件和库文件添加到工程属性中,作者使用opencv24+VC2010示范。

#include <opencv2/highgui/highguihpp>

#include <opencv2/imgproc/imgprochpp>

#include <iostream>

#include <stdioh>

#include <vector>

#include <mathh>

#pragma comment (lib,"opencv_core244dlib")

#pragma comment (lib,"opencv_highgui244dlib")

#pragma comment (lib,"opencv_imgproc244dlib")

定义一个颜色常量target,默认值即为刚才吸管工具提取的红色色块的RGB值分量,和一个计算与颜色标准值色差的函数,暂定为色差在10以内即为相近颜色。这里cv::Vec3b 变量对应一个数组值, Vec3b[0] 对应blue,Vec3b[1]对应green,Vec3b[2]对应Red,即BGR。

接着添加以下代码,目的为读取源,根据大小做一定的缩放,然后定义同样大小的一个灰度图,用于存贮计算结果值。核心算法如下,遍历源,色差(与红色色块比较)低于30的即为需要提取的颜色值,将此像素位置记录并写入到灰度图中,以黑色显示,否则设置为白色。然后将处理前后显示出来。

实际商业应用中也是可以如法炮制的,比如下图的药片,大小,颜色不统一,如何提取识别**小药片在何处或计算其数量呢。

笔者尝试使用吸管工具提取其BGR值为(22,184,245),将色差由10调整为30,可以正确检测此药片。如图。

以上就是关于OpenCV图像灰度化是怎么做的呢全部的内容,包括:OpenCV图像灰度化是怎么做的呢、opencv c++ 以灰度图方式加载一张图片,并统计该图像素的最大值、最小值、均值以及方差,完整代码、求助OpenCV达人等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9629611.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存