腐蚀
Mat element = getStructuringElement(MORPH_RECT,Size(15,15));
erode(srcImage,dstImage,element);
element是获取自定义的核
膨胀
dilate(srcImage,dstImag,element);
滤波
均值滤波
blur(srcImage,dstImage,Size(w,h));
这里有必要介绍一下Size类,Size模板内部重载了一些构造函数,最常用的是Size(width,height);这里是代表的是滤波的内核大小,值得注意的是wh的值只能取奇数
高斯滤波
GaussianBlur(srcImage,dstImage,Size(w,h));
高斯滤波是最常用的滤波方式,高斯低同就是模糊,高斯高通就是锐化
边缘检测
Canny(srcImage,dstImage,threshold1,threshold2,3);
低于阈值1的像素点会被认为不是边缘;
高于阈值2的像素点会被认为是边缘;
在阈值1和阈值2之间的像素点,若与第2步得到的边缘像素点相邻,则被认为是边缘,否则被认为不是边缘
最后一个为尺寸参数,默认为3
颜色空间转换
cvtColor(srcImage,dstImage,int code);
code代表宏定义的7标识符,在opencv2下,RGB转HLS空间的code为CV_RGB2HLS
通道分离
split(srcImage,Mat *channels);
具体用法如下:
Mat channels[3];
Mat imageBlueChannel;
Mat imageGreenChannel;
Mat imageRedChannel;
split(srcImage,channels);
imageBlueChannel = channels[0];
imageGreenChannel = channels[1];
imageRedChannel = channels[2];
颜色抓取
分两步,先将RGB空间,转化为HSV空间
cvtColor(srcImage,Image_HSV,CV_BGR2HSV);
再用inRange函数二值化
inRange(Image_HSV,Scalar(),Scalar(),dstImage);
第一个Scalar取所选颜色的最低阈值,第二个Scalar取所选颜色的最高阈值
黑 | 灰 | 白 | 红 | 橙 | 黄 | 绿 | 青 | 蓝 | 紫 | |
---|---|---|---|---|---|---|---|---|---|---|
hmin | 0 | 0 | 0 | 0|156 | 11 | 26 | 35 | 78 | 100 | 125 |
hmax | 180 | 180 | 180 | 10|180 | 25 | 34 | 77 | 99 | 124 | 155 |
smin | 0 | 0 | 0 | 43 | 43 | 43 | 43 | 43 | 43 | 43 |
smax | 255 | 43 | 30 | 255 | 255 | 255 | 255 | 255 | 255 | 255 |
vmin | 0 | 46 | 221 | 46 | 46 | 46 | 46 | 46 | 46 | 46 |
vmax | 46 | 220 | 255 | 255 | 255 | 255 | 255 | 255 | 255 | 255 |
直线绘制
void cvLine( srcImgae,point1,point2,color,thickness,shift);
第一个参数:若为RGB三通道的图像,则可以显示彩色线条
第二个参数:起始绘制点,用point类来表示
第三个参数:结束绘制点
第四个参数:线条颜色,用scalar()表示
第五个参数:线条粗细
第六个参数:小数点位数
标准霍夫变换
HoughLines(srcImage,dstImage,rho,theta,threshold,0,0);
第三个参数:以像素为单位的距离精度
第四个参数:以弧度为单位的角度精度
第五个参数:阈值参数
像素的读取和赋值
image.at<uchar>(i,j)[channel];
i是行数,j是列数,channel为通道数
注意:i的范围是0-(image.rows-1)
j的范围是0-(image.cols-1)