您的位置:首页 > 理论基础 > 数据结构算法

OpenCV 学习记录3 数据结构和基本绘图

2017-04-16 10:13 477 查看

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;
}


还有一些画直线、画矩形等等,今天有点累就不想再打一遍书上代码了,就到这里吧,依旧有问题欢迎大家留言指出 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv