OPENCV学习录

本系列博客根据毛星云的OPENCV3书籍的流程撰写,目的在于学习的过程中记录所学所获,并将遇到的bug与解决方法进行记录,可供大家参考~

邂逅OPENCV

小小例程

腐蚀图像

用图像中的暗色部分腐蚀掉图像中的图像中的高亮部分

int main()
{
	// 读入一张图片(poyanghu缩小图)    
	Mat img = imread("D:\\xiaokonglong\\xiaokonglong.jpg");
	// 创建一个名为 "图片"窗口    
	namedWindow("tupian");
	// 在窗口中显示图片   
	imshow("tupian",img);
	Mat element =getStructuringElement(MORPH_RECT, Size(15, 15));//用Mat存返回值,该函数为指定形状和尺寸的结构元素(内核矩阵)
	Mat dstImage;
	erode(img, dstImage, element);//对图像进行腐蚀操作
	imshow("腐蚀操作", dstImage);
	// 等待6000 ms后窗口自动关闭    
	waitKey(6000);
	return 0;
}

图像模糊

利用blur函数进行均值滤波

int main()
{
	// 读入一张图片(poyanghu缩小图)    
	Mat img = imread("D:\\xiaokonglong\\xiaokonglong.jpg");
	// 创建一个名为 "图片"窗口    
	namedWindow("tupian");
	// 在窗口中显示图片   
	imshow("tupian",img);
	Mat dstimage;
	blur(img, dstimage, Size(7, 7));
	imshow("均匀滤波", dstimage);
	waitKey(6000);
	return 0;
}

边缘检测

遇到的bug

0x00007FF3907A9C0(ntdll.dll)…
OPENCV学习录_第1张图片

原因:使用waitKey(6000);占用内存后,并未清理

解决方案:destroyAllWindows();return 0`前,waitKey()``后加上清除窗口的代码。

所用到的函数

	//转换为灰度图像,img为输入,grayimage为输出
	cvtColor(img, grayimage, COLOR_BGR2GRAY);
	//创造一个与img同类型同大小的矩  目标对象 .create(原对象.size,原对象.type())函数
	dstimage.create(img.size(), img.type());
//canny算法描述
edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])
###
参数 Image - 输入图片,必须为单通道的灰度图
参数 threshold1 和 threshold2 - 分别对应于阈值 minVal 和 maxVal
参数 apertureSize - 用于计算图片提取的 Sobel kernel 尺寸. 默认为 3.
参数 L2gradient - 指定计算梯度的等式. 当参数为 True 时,采用 2.2 中的梯度计算公式,其精度更高;否则采用的梯度计算公式为:
梯度|G|=|Gx|+|Gy|
###

int main()
{
	// 读入一张图片(poyanghu缩小图)    
	Mat img = imread("D:\\xiaokonglong\\xiaokonglong.jpg");
	// 创建一个名为 "图片"窗口    
	namedWindow("tupian");
	// 在窗口中显示图片   
	imshow("tupian",img);
	//cannny边缘检测
	Mat dstimage, edge, grayimage;
	//创造一个与img同类型同大小的矩  目标对象 .create(原对象.size,原对象.type())函数
	dstimage.create(img.size(), img.type());
	//转换为灰度图像
	cvtColor(img, grayimage, COLOR_BGR2GRAY);
	blur(grayimage, edge, Size(3, 3));
	Canny(edge, dstimage, 3, 9, 3);
	imshow("边缘检测效果图", dstimage);
	waitKey(6000);
	destroyAllWindows();
	return 0;
}

![请添加图片描述](https://img-blog.csdnimg.cn/871f05edea9e4ccb861c36d68e45f57a.png

读视频、调用摄像头

读取一段视频,每一帧延迟30毫秒

	int main()
{
	VideoCapture capture("F:\\ceshi.mp4");//此行为实例化,即创建一个VideoCapture类型的变量,并为其赋值
     //VideoCapture capture;
     //capture.open("F:\\ceshi.mp4");//意思相同
     //将capture.open(0);,即可调用摄像头
	while (1)
	{
		Mat frame;
		capture >> frame;//读取当前帧
		imshow("读取视频", frame);
		waitKey(30);
	}

	return 0;
}

OPENCV学习录_第2张图片

你可能感兴趣的:(opencv,opencv,计算机视觉,学习)