OpenCV中包含core组件,这个大组件包含一些图像的基本操作,简述下几个模块:
1:操作图像像素:有三种方式
a. 指针访问:C操作符[],一般就是*data[],速度最快
b. 迭代器iterator,
Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>();//初始位置迭代器
Mat_<vec3b>::iterator itend = outputImage.end<Vec3b>();//终止位置的迭代器
for(;it != itend;++it)
{
(*it)[0] = ( *it )[0]/div *div + div/2;
(*it)[1] = ( *it )[1]/div *div + div/2;
(*it)[2] = ( *it )[2]/div *div + div/2;
}
c. 动态地址计算,outputImage.at(i,j)[0],就是用at存取图像元素。
设置感兴趣区域:
两种方法:
一使用表示矩形区域的Rect,指定矩形的左上角坐标和矩形的长宽。
imgROI = image(Rect(500,250,logo.cols,logo.rows));
二是指定感兴趣的行或列的范围(Range)。 imgROI=image(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));线性混合操作:是典型的二元(两个输入)的像素操作:
g(x)=(1-a)f1(x)+af2(x),比如透明度不同的两幅图
这里实现的话要使用数组加权和addWeighted()函数
addWeighted(in1,a,in2,b,g,out,-1);颜色通道的问题
通道分离:split(sr