OpenCV编程注意事项
1、图片格式
OpenCV读取彩色图是是BGR格式,可以通过以下函数来转换:
#python
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
//c++
cvtColor(rgb_img, bgr_img, CV_BGR2RGB);
2、坐标系
OpenCV中图像的左上角为坐标系的原点,这种坐标系在结构体Mat,Rect,Point
中都是适用的。
OpenCV中坐标体系的X轴为图像矩形的上面那条水平线,从左往右;Y轴为图像矩形左边的那条垂直线,从上往下(参见上图)。
用image.at<TP>(m, n)
来访问图像中点的值的时候,m表示的是y值,即第几行(rows),而n表示的是x值,即第几列(cols)
在Point(x,y)
和Rect(x,y)
中,第一个参数x
代表的是元素所在图像的列数,第二个参数y
代表的是元素所在图像的行数,
row == height == Point.y
col == width == Point.x
2、Mat类的初始化
1、Mat src(3,5,CV_32FC1, 1)
或者Mat src(3, 5, CV_32FC1, Scalar(1))。初始化一个三行五列的矩阵,并且初始化其值为1。
2、Mat m(3, 5, CV_32FC2, Scalar(1, 2));
与上一个的区别在于图像格式不同 CV_32FC2 他是两个通道,所以赋值是给两个值。对于三通道自然就不必再说了。
3、
Rect rect1(0, 0, int(src.cols / 6), int(src.rows / 2));
Mat src1 = src_gray(rect1);
src1 截取src_gray 的一部分初始化自己。 事实上,src1是对src_gray的那部分的引用。对应的操作会转移到原图身上。需要知道这一点。如果要进行指定区域的复制 则应该
Mat src1 =src_gray(rect1).clone();