①快速上手OpenCV

<一>快速上手OpenCV

(1)图像显示

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    //Mat是一个类,和C中的int一样的功能;
    //imread函数:读入图片(注:图片的绝对地址和图片的格式一定要对!)
	Mat img = imread("test1.png");
	//imshow函数:图片的显示
	imshow("图像", img);
	//waitKey(0)是指等待任意键按下
	waitKey(0);
}

(2)图像腐蚀

①腐蚀:用图像中暗色部分腐蚀掉图像中高亮部分(额…书上说后面有系统的解释,我还没看到,不过可以直观感受一下什么叫腐蚀)

②贴上代码和示例吧

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
	Mat srcimg = imread("timg.jpg");
	imshow("腐蚀图像", srcimg);
	//getStructuringElement()函数的返回值为指定形状和尺寸的结构元素
	Mat element = getStructuringElement(MORPH_RECT, Size(12, 12));
	Mat dstimg;
	//erode函数用于图像腐蚀,三个参数的含义:将srcimg腐蚀为参数为element的dstimg
	erode(srcimg, dstimg, element);
	imshow("效果图", dstimg);
	waitKey(0);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

(3)图像模糊

①图像模糊:对图像进行均值滤波操作(逃…
②代码和示例

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
	Mat src = imread("模糊.jpg");
	imshow("原始图", src);
	Mat dstimg;
	//blur函数进行模糊操作,将模糊处理后的函数存放在dstimg以显示
	blur(src, dstimg, Size(6,6));
	imshow("效果图", dstimg);
	waitKey(0);
	return 0;
}

结论:发现Size(x1,x2)中的x取值对模糊程度有影响,两个x取值应该一个是横向一个是纵向,然后值越大那么模糊程度越高。
在这里插入图片描述
在这里插入图片描述

(4)canny边缘检测

①边缘检测:转化为灰度图–>用blur函数进行模糊降噪–>用canny函数进行边缘检测,用途未知,可以先直观感受一下,以后学习应该会加深理解,是计算机图像很重要的一个东东。
②代码和示例

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
	Mat img = imread("canny_test.jpg");
	imshow("原始图", img);
	Mat dstimg, edge, grayimg;
	//创建和img同样大小的dstimg图像矩阵
	dstimg.create(img.size(), img.type());
	//将图像转化为灰度图
	cvtColor(img, grayimg, COLOR_BGR2GRAY);
	//用3*3内核降噪
	blur(grayimg, edge, Size(3, 3));
	//Canny函数
	Canny(edge, edge, 3, 9, 3);
	imshow("效果图", edge);
	waitKey(0);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

(5)OpenCV视频操作基础

①什么意思:利用OpenCV中的VideoCapture类对视频进行读取以及对摄像头的调用(想必对我要实现的内容有些重要,?)

具体了解一下吧,分为视频读取&&摄像头调用两类。

②读取视频–>播放视频
其实质就是视频读入到VideoCapture类对象之后,用循环的操作将每一帧展现出来。
额…接下来 就是看看代码和示例吧:

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    //这一句等同于:VedioCapture capture; capture.open("  ");
    //意思就是初始化的时候类似于C中int a;a=5和int a=5的区别而已...
    //这里的1.avi问题我还没有解决,待解决???
	VideoCapture capture("1.avi");
	while (1)
	{
		Mat frame;
		//按照每帧的单位读取视频然后进行播放
		capture >> frame;
		imshow("读取视频", frame);
		waitKey(30);
	}
	return 0;
}

视频展示示例不太好贴,贴了也没有太大意义,嘤~

③调用摄像头采集图像(额,机器人里面希望能够实现)

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    //从摄像头读取就发现参数变成0了
	VideoCapture capture(0);
	while (1)
	{
		Mat frame;
		capture >> frame;
		imshow("摄像头读取", frame);
		waitKey(30);
	}
	return 0;
}

④这是一个书中提到的调用摄像头配合Canny检测,倒不如说是将图片进行动态化Canny检测好了。

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    VedioCapture capture(0);
    Mat edges;
    while(1)
    {
        Mat frame;
        capture>>frame;
        cvtColor(frame,edges,CV_BGR2GRAY);
        blur(edges,edges,Size(7,7));
        Canny(edges,edges,0,30,3);
        imshow("被Canny后的视频",edges);
        if(waitKey(30)>=0)
        break;
    }
    return 0;
}

在这里插入图片描述

感想:第一次写CSDN博客,也是希望督促学习新东西吧,用了两个小时,把最基础的经典代码码到博客,以后好好看,好好学习吧。?

参考资料:OpenCV3编程入门(毛星云著,电子工业出版社)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值