OpenCV达成图像的灰度处理,二值化,阀值选择
发布时间:2021-11-19 18:38:42 所属栏目:教程 来源:互联网
导读:前几天接触了图像的处理,发现用OPencv处理确实比较方便,毕竟是很多东西都封装好的,但是要研究里面的东西,还是比较麻烦的,首先,你得知道图片处理的一些知识,比如腐蚀,膨胀,仿射,透射等,还有很多算法,傅里叶,积分,卷积,频谱,加权。反正我看了
|
前几天接触了图像的处理,发现用OPencv处理确实比较方便,毕竟是很多东西都封装好的,但是要研究里面的东西,还是比较麻烦的,首先,你得知道图片处理的一些知识,比如腐蚀,膨胀,仿射,透射等,还有很多算法,傅里叶,积分,卷积,频谱,加权。反正我看了半天,是云里雾里的,所以就想先就笼统的过一遍,以后遇到了再具体分析,比较这方面的基础没那么扎实。先来记录下目前学习到的一些知识。 首先是图像的灰度处理: CV_LOAD_IMAGE_GRAYSCALE,这是最简单之间的办法,在载入图像时直接处理 IplImage* Igray=cvLoadImage("test.jpg",CV_LOAD_IMAGE_GRAYSCALE); 得到的图像就是单通道的,也可以用这个函数:CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code ); code=CV_BGR2GRAY; opencv还提供了很多方式,我这边就不一一举例了。 图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。 灰度处理后就可以二值化了,这是方便图像处理的重要步骤,但貌似不适合对颜色有要求的图像处理,对轮廓有要求的比较有效。 函数是这个:CVAPI(double) cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); threshold是阀值,max_value取值255最大值 threshold_type:就是显示的轮廓会有不同 /* Types of thresholding */ #define CV_THRESH_BINARY 0 /* value = value > threshold ? max_value : 0 */ #define CV_THRESH_BINARY_INV 1 /* value = value > threshold ? 0 : max_value */ #define CV_THRESH_TRUNC 2 /* value = value > threshold ? threshold : value */ #define CV_THRESH_TOZERO 3 /* value = value > threshold ? value : 0 */ #define CV_THRESH_TOZERO_INV 4 /* value = value > threshold ? 0 : value */ #define CV_THRESH_MASK 7 #define CV_THRESH_OTSU 8 /* use Otsu algorithm to choose the optimal threshold value; combine the flag with one of the above CV_THRESH_* values */ 阀值选取: 一般来说会取100,127等固定值,这类取值比较随意,的到的图像也还可以,但是这边比较推荐的一个方式是自适应阀值: IplImage* Igray=0,*It=0,*Iat; int threshold_type = CV_THRESH_BINARY; int adaptive_method = CV_ADAPTIVE_THRESH_GAUSSIAN_C; int blocksize = 31; double offset =15; int threshold=100; if(0==(Igray=cvLoadImage("test.jpg",CV_LOAD_IMAGE_GRAYSCALE))){ return -1; } It = cvCreateImage(cvSize(Igray->width,Igray->height), IPL_DEPTH_8U, 1); Iat = cvCreateImage(cvSize(Igray->width,Igray->height), IPL_DEPTH_8U, 1); //Threshold cvThreshold(Igray,It,threshold,255,threshold_type);//阀值100 cvAdaptiveThreshold(Igray,Iat,255,adaptive_method,//自适应阀值,blocksize为奇数 threshold_type,blocksize,offset); ![]() (编辑:开发网_郴州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



浙公网安备 33038102330466号