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

本文介绍了OpenCV中关键的Mat类及其使用方法,包括图像复制、点类、矩形类及颜色表示等基本操作,并提供了绘制实心圆的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

还有一些画直线、画矩形等等,今天有点累就不想再打一遍书上代码了,就到这里吧,依旧有问题欢迎大家留言指出 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值