6、【opencv入门】Mat类介绍,基本的绘图函数

一、Mat类

1、Mat类的创建

1     Mat img;//创建无初始化矩阵
2     Mat img1(200,100,CV_8UC1);//200行,100列(长200,宽100)
3     Mat img2(Size(200,100),CV_8UC3,Scalar(0,255,0));//长100,宽200
4     Mat img3(200,100,CV_8UC3,Scalar(0,255,0));//创建200行,100列的8位三通道矩阵
5     Mat img4(200,100,CV_8UC1,Scalar(255));//创建单通道矩阵  

2、Mat类赋值拷贝

1 Mat img(100, 200, CV_8UC3, Scalar(0, 255, 0));
2 Mat img2(img);//和原图像指向同一数据块,跟随原图改变
3 Mat img3 = img;//和原图像指向同一数据块,跟随原图改变
4 Mat img4 = img.clone();//创建一个原图像的副本,不会随原图像改变
5 Mat img5;
6 img5.copyTo(img5);//创建一个原图像的副本,不会随原图像改变

【示例】

 1 //图像的拷贝
 2 #include <opencv2/opencv.hpp>
 3
 4 using namespace cv;
 5
 6 int main(){
 7     Mat img1=imread("1.jpg");
 8     Mat img2(img1);
 9     Mat img3=img1;
10     Mat img4=img1.clone();
11     Mat img5;
12     img1.copyTo(img5);
13
14     cvtColor(img1,img1,CV_BGR2HSV);//BGR图转为HSV图
15     imshow("img1",img1);
16     imshow("img2",img2);
17     imshow("img3",img3);//image1/2/3跟随原图变化
18     imshow("img4",img4);
19     imshow("img5",img5);//image4/5不会跟随原图变化
20     waitKey(0);
21
22     return 0;
23 }

二、基本的绘图函数

1、画线、画圆、画矩形

 1 //基本的绘图函数
 2 #include <opencv2/opencv.hpp>
 3
 4 using namespace cv;
 5
 6 int main(){
 7     //创建一个500行400列,3通道(即彩色图)的白色图
 8     Mat img(500,400,CV_8UC3,Scalar(255,255,255));
 9
10     //在img图中画一条黄线,线宽为20,线型为8联通(一般都设置为8)
11     line(img,Point(10,10),Point(100,250),Scalar(0,255,255),20,8);
12
13     //以(200,100)为圆心,半径为50,线宽为15画空心圆
14     circle(img,Point(200,100),50,Scalar(0,255,255),15,8);
15
16      //设置为-1时,画实心圆
17     circle(img,Point(200,250),50,Scalar(0,255,255),-1,8);
18
19     //传入坐上、右下角坐标,画空心矩形
20     rectangle(img,Point(10,100),Point(200,200),Scalar(0,0,255),1,8);
21
22     //传矩形数据(左上角坐标(200,300)和宽100,高50),画实心绿色矩形
23     rectangle(img,Rect(200,300,100,50),Scalar(0,255,0),-1,8);
24
25     imshow("drawing",img);
26     waitKey(0);
27
28     return 0;
29 }

2、画椭圆、画多边形、写入文字

 1 //画椭圆、画多边形、写入文字
 2 #include <opencv2/opencv.hpp>
 3 using namespace cv;
 4
 5 int main(){
 6     //创建一个600*500大小,3通道的白色图片
 7     Mat img(600,650,CV_8UC3,Scalar(255,255,255));
 8
 9     //画椭圆,(200,200)为中点,15旋转角度,0~360度,长轴180,短轴80
10     ellipse(img,Point(200,200),Size(180,80),15,0,360,Scalar(0,255,255),10,8);
11     //画椭圆,40旋转角度
12     ellipse(img,RotatedRect(Point(350,350),Size(150,100),40),Scalar(0,255,0),-1,8);
13
14     //定义点集
15     Point ppt[]={Point(120,50),Point(180,50),Point(210,100),Point(180,150),Point(120,150),Point(90,100)};
16     Point ppt2[]={Point(80,400),Point(80,550),Point(250,500),Point(300,550)};
17     const Point* pts[]={ppt};
18     const Point* pts2[]={ppt2};
19     int npt[]={6};
20     int npt2[]={4};
21
22     //画填充多边形
23     fillPoly(img,pts,npt,1,Scalar(255,255,0),8);
24
25     //画多边形,false为不闭合,true为闭合
26     polylines(img,pts2,npt2,1,false,Scalar(0,100,200),2,8);
27
28     //写入文字
29     putText(img,"China",Point(400,400),CV_FONT_BLACK,2,Scalar(100,100,100),5,8);
30
31     imshow("drawing",img);
32     waitKey(0);
33
34     return 0;
35 }

原文地址:https://www.cnblogs.com/Long-w/p/9661486.html

时间: 2024-10-13 19:59:37

6、【opencv入门】Mat类介绍,基本的绘图函数的相关文章

opencv学习之路(4)、Mat类介绍,基本绘图函数

一.Mat类创建 1 #include <opencv2/opencv.hpp> 2 using namespace cv; 3 4 void main(){ 5 Mat img1=imread("E://1.jpg"); 6 Mat img2(img1); 7 Mat img3=img1; 8 Mat img4=img1.clone(); 9 Mat img5; 10 img1.copyTo(img5); 11 12 cvtColor(img1,img1,CV_BGR2H

OpenCv学习笔记(一)----OpenCv中Mat类源码的详细解读(2)

(一)像素存储的方法 1--本节我们讲解如何存储像素,存储像素值,需要指定: 1--颜色空间 2--数据类型 2--其中,颜色空间是指针对一个给定的颜色,如何组合颜色以其编码. 3--最简单的颜色空间是----灰度级空间----只需要处理:黑色和白色,对它们进行组合便可以产生不同程度的灰 色(256灰度级) 4--对于彩色方式---则有更多种类的颜色空间,但不论那种方式,都是把颜色分成:三个或者四个---基元素,通过 组合基元素,就可以产生所有的颜色 1--RGB颜色空间是最常用的一种颜色空间,

OpenCV cv::Mat类

using namespace cv; 1.Mat的声明: Mat m=Mat(rows, cols, type); Mat m=Mat(Size(width,height), type); type指矩阵中元素的类型,可以使CV_8U(无符号单字节像素),CV_8S(有符号单字节像素),CV_8UC3(3通道每个通道是无符号单字节),CV_16SC3(3通道,每个通道是16位有符号),CV_32F(单通道,32位浮点数)等等.. 如Mat m=Mat(240, 320, CV_8U,cv::S

OpenCV中Mat,图像二维指针和CxImage类的转换

在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转换和相应的对应关系. 一.OpenCV的Mat类到图像二值指针的转换 以下为函数代码: unsigned char** MatTopImgData(Mat img) { //获取图像参数 int row = img.rows; int col = img.cols; int band = img.c

vector类转换Mat类

前言 一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型. 在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat类. 代码: std::vector<int> responses; cv::Mat tres; tres = Mat(responses, true);//vector2mat 该构造函数的定义如下(在mat.hpp文件中): template<typename _Tp> inlin

opencv学习 2.Mat类图像遍历

图像的遍历 原图 1.简单存取像素值 代码如下: // Mat类图像遍历.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "cv.h" #include "cxcore.h" #include "highgui.h" using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[])

openCV学习笔记(6):Mat类/数据结构详解(1)

Mat类不仅可以用于图像存储,同时也是一个通用的矩阵类,可以用来创建和操作多维矩阵,以后将会更新将Mat作为矩阵类的学习笔记.本文重点在于重新学习Mat类的结构,主要是重要成员变量和构造函数. 一.Mat类 Mat类中关键属性如下所示: //Mat类 class CV_EXPORTS Mat { public: //一系列函数 /* 包括几位字段: -Mat的标识 -连续性标志 -深度(位深) -通道数 */ int flags; //矩阵的维数,取值> = 2 int dims ; //矩阵的

【OpenCV入门教程之十七】OpenCV重映射 &amp; SURF特征点检测合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中

【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们将一起学习OpenCV中