Mat类
OpenCV里很重要的一个类就是Mat, 图像处理基本靠这个类,Mat即matrix,矩阵。图像在计算机中的存储是一个矩阵,各个点记录着图片每个像素点的灰度值。
因为大图像复制需要消耗大量时间,会减慢程序速度,所以OpenCV里的复制是传址复制,就是各个变量名指向的都是同一个图像的地址,一个变量修改了图像,则这个图像就会发生改变,所有指向这个地址的变量引用的图像都会改变。
Mat A=imread("image.jpg");
Mat B=A;//赋值运算符
Mat C(A);//拷贝构造函数
如上面3个对象ABC的创建,三个对象指向的都是image.jpg这个图像,通过任一对象对图像做改变都会影响另外两个对象。
如果想要完全复制,对象之间互不影响的话可以使用下面两种方法进行复制。
Mat A=imread("image.jpg");
Mat F=A.clone();//第一种
Mat G;
A.copyTo(G);//第二种
数据结构之点类:
Point p;
p.x=10;
p.y=10;
//或者直接 Point p=Point(10,10);
矩形,Rect类 :
Rect类的成员变量里有x,y,width,height,(x,y )表示左上角点的坐标,后面两个参数是矩形的宽和高。
颜色表示,Scalar类:
Scalar(10,100,200);//OpenCV里默认的颜色是按BGR的顺序
颜色转换,cvtColor()函数:
#include<opencv2\opencv.hpp>
using namespace cv;
int main() {
Mat image = imread("dota.jpg"), dstimage;
cvtColor(image, dstimage,COLOR_BGR2Lab);
imshow("convertcolor", dstimage);
waitKey(0);
return 0;
}
绘图,画实心圆:
#include<opencv2\opencv.hpp>
using namespace cv;
#define WINDOW_WIDTH 600
void DrawFilledCircle( Mat img,Point center)
{
int thickness = -1;
int lineType = 8;
circle(img,
center,
WINDOW_WIDTH / 32,
Scalar(0, 0, 255),
thickness,
lineType);
}
int main() {
Mat image = imread("dota.jpg") ;//注意图片路径,不然会有异常
//imshow("origin", image);
Point p = Point(300, 300);
DrawFilledCircle(image, p);
imshow("convertcolor", image);
waitKey(0);
return 0;
}
还有一些画直线、画矩形等等,今天有点累就不想再打一遍书上代码了,就到这里吧,依旧有问题欢迎大家留言指出 。