OpenCV入门学习(2)

Opencv学习day02

出入每天学习点OpenCV,做做计算机视觉项目



前言

为了项目与论文需要,现在入门 OpenCV4学习,并且学习点深度学习的东西,希望有助于自身论文的研究,只是为了毕业。。。


一、内容

1.图像通道分离

通道分离:

void split(const mat& src, mat* mvbegin
void split(InputArray m, OutputArrayOfArrays mv)

第一个参数,inputarray类型的m或者const mat&类型的src,填我们需要进行分离的多通道数组。
第二个参数,outputarrayofarrays类型的mv,填函数的输出数组或者输出的vector容器
通道合并:

void merge(InputArrayOfArrays mv, OutputArray dst);

第一个参数,mv。填需要被合并的输入矩阵或vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度。
第二个参数,dst。即输出矩阵,和mv[0]拥有一样的尺寸和深度

void OpenCV_quick_day01Demo::chanel_split(Mat &image) {
	 std::vector<Mat> mv;
	 split(image, mv);//分离出各个通道
	 imshow("蓝色", mv[0]);
	 imshow("绿色", mv[1]);
	 imshow("红色",mv[2]);

	 //显示
	 Mat dst;
	 mv[0] = 0;//消除第一通道
	 mv[1] = 0;//消除第二通道
	 merge(mv, dst);
	 imshow("红色",dst);
	 /*mv[0] = 0;//消除第一通道
	 mv[2] = 0;//消除第三通道
	 merge(mv, dst);
	 imshow("绿色", dst);*/
	 /*mv[1] = 0;//消除第二通道
	 mv[2] = 0;//消除第三通道
	 merge(mv, dst);
	 imshow("蓝色", dst);*/
 }

2.视频的调用

void OpenCV_quick_day01Demo::camera_demo() {
	 //VideoCapture vc(0);//0表示电脑本机摄像头
	 VideoCapture vc;
	 vc.open(0);//
	 while (1) {
		 Mat frame;
		 vc >> frame;
		 imshow("调用摄像头",frame);
		 waitKey(30);
	 }
 }

3.摄像头调用

 void OpenCV_quick_day01Demo::camera_demo() {
	 //VideoCapture vc(0);//0表示电脑本机摄像头
	 VideoCapture vc;
	 vc.open(0);//
	 while (1) {
		 Mat frame;
		 vc >> frame;
		 imshow("调用摄像头",frame);
		 waitKey(30);
	 }
 }

4.几种打印输出格式

 void OpenCV_quick_day01Demo::cout_demo() {
	 Mat m = Mat(3, 3, CV_8UC3);
	 randu(m, Scalar(0), Scalar(255));

	 cout << "m = " << m << endl;

	 cout << "m =[python风格] " << format(m,Formatter::FMT_PYTHON) << endl;

	 cout << "m =[numpy风格] " << format(m, Formatter::FMT_NUMPY) << endl;

	 cout << "m = [逗号风格] " << format(m, Formatter::FMT_CSV) << endl;
 }

5.基本图形的绘制

椭圆绘制:

void ellipse(InputOutputArray img, Point center, Size axes,
                        double angle, double startAngle, double endAngle,
                        const Scalar& color, int thickness = 1,
                        int lineType = LINE_8, int shift = 0);

InputOutputArray img, 被绘制的图像
Point center, 椭圆中心
Size axes, 长轴与短轴的长度
double angle, 旋转角度
double startAngle, 开始画的角度
double endAngle, 结束的角度
const Scalar& color, 椭圆颜色
int thickness = 1, 椭圆线宽,默认为1 ,-1时封闭图形将填充
int lineType = LINE_8,线型
int shift = 0

圆型绘制:

void circle(InputOutputArray img, Point center, int radius,
                       const Scalar& color, int thickness = 1,
                       int lineType = LINE_8, int shift = 0);

int radius 圆半径
其他同上

直线绘制:

void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
                     int thickness = 1, int lineType = LINE_8, int shift = 0);

Point pt1, 直线起点
Point pt2 直线终点

多边形绘制:

void fillPoly(InputOutputArray img, const Point** pts,
                         const int* npts, int ncontours,
                         const Scalar& color, int lineType = LINE_8, int shift = 0,
                         Point offset = Point() );

const Point** pts, 指向多个多边形顶点的数组的列表;
const int* npts, 多边形的顶点个数的数组。
int ncontours, 组成填充区域的数量

 void OpenCV_quick_day01Demo::drawBasicImage(Mat &image) {
	 cout << image.cols <<" "<< image.rows;
	 //ellipse 在image上绘制椭圆
	 ellipse(image,Point(200,200),Size(80,50),0,0,360,Scalar(220,175,0),5,8);
	//circle 在image上绘制圆
	 circle(image, Point(100, 100), 50, Scalar(175, 100, 100), 2, 4);

	 //绘制多边形
	 Point rookPoints[1][5] = {Point(50,20),Point(80,100),Point(100,150),Point(40,220),Point(60,180)};
	 const Point* ppt[1] = { rookPoints[0] };
	 int npt = 5;
	 fillPoly(image, ppt, &npt,1,Scalar(20,80,90),8);

	 //绘制直线
	 line(image, Point(50, 50), Point(200, 300), Scalar(220, 125, 220));

	 imshow("draw", image);
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值