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_BGR2HSV);//BGR图转为HSV图
13     imshow("img1",img1);
14     imshow("img2",img2);
15     imshow("img3",img3);//image1/2/3跟随原图变化
16     imshow("img4",img4);
17     imshow("img5",img5);//image4/5不会跟随原图变化
18     waitKey(0);
19 }

二、基本绘图函数

1、画线、画圆、画矩形

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

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

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

时间: 2024-10-29 10:45:45

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

C++学习之路: class类外的成员函数定义 和 友元 的讨论

引言:成员函数定义在类内和类外的区别在于是否内联展开. 定义在类内一般都是内联展开的, 节省了调用函数的开销.如果函数体过于庞大,编译器会忽视内联建议 如果定义在类外,需要在类内声明,则程序运行时 是采用调用的方式 访问该函数,是非内联的方式. 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 6 class Student 7 { 8 publi

Python学习之路:函数式编程介绍&amp;高阶函数

函数式编程:一种抽象程度很高的范式,重要特点:输入是确定的,输出就是确定的: Python对函数式编程,部分支持: 高阶函数: def add(x,y,f):#函数本身传给函数,就是高阶函数 return f(x)+f(y) res = add(3,-6,abs) print(res)

OpenCV学习教程入门篇&lt;一、介绍&gt;

OpenCV,是Inter公司开发的免费开源专门由于图像处理和机器视觉的C/C++库,英文全称是Open Source Computer Vision. 1. 可视化语言Matlab与OpenCV都可以用于图像处理,学哪种比较好? Matlab是主要面对高校做科研的一种可视化数学处理工具箱,OpenCV在有关图像的项目研发方面应用广泛.想做模式识别和机器视觉方向的,我的导师建议两者都要学好,不论发表paper,还是做项目. 2.OpenCV是基于C/C++的函数库,有什么优势? 使用C编写的库,

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

[opencv]学习之路

参考这个人的教程: 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.8 2016年9月7日 花了一个早上,才配置好了环境.然后系统有错误就开始崩盘,我也是跟着浅墨大神走的,最后还是女神比较给力,遇见了跟我一样的情况,在她的指导下,走出困境! 基本结构

【C++学习之路】派生类的构造函数(三)

三.多层继承的派生类 1.多层继承的派生类只需在构造函数的初始化列表中写出直接基类的构造函数即可 1 class student 2 { 3 public: 4 student(int n, string nam) 5 { 6 num = n; name = nam; 7 } 8 }; 9 class student1 : public student 10 { 11 public: 12 student1(int n, string nam, int a) :student(n, nam) {

Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资料都可以查到,简单来说,就是将图像分成一个cell,通过对每个cell的像素进行梯度处理,进而根据梯度方向和梯度幅度来得到cell的图像特征.随后,将每个cell的图像特征连接起来,得到一个BLock的特征,进而得到一张图片的特征.Opencv当中自带HOG算法,可以直接调用,进行图像的特征提取.但

opencv学习之路(2)、读取视频,读取摄像头

一.介绍 视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的.1秒24帧基本就能流畅的读取视频了. ①读取视频有两种方法: A. VideoCapture cap; cap.open("1.avi"); B. VideoCapture cap("1.avi"); ②循环显示每一帧: while(1) { Mat frame; //定义Mat变量,用来存储每一帧 cap>>frame; //读取当前帧方法一 //cap.read(frame); /

Opencv学习之路——自己编写的HOG算法

#include<opencv2\core\core.hpp> #include<opencv2\highgui\highgui.hpp> #include<opencv2\opencv.hpp> #include<iostream> #include<fstream> using namespace std; using namespace cv; #define Max 100 class Cell{ private: int pixel_x