本系列博客根据毛星云的OPENCV3书籍的流程撰写,目的在于学习的过程中记录所学所获,并将遇到的bug与解决方法进行记录,可供大家参考~
用图像中的暗色部分腐蚀掉图像中的图像中的高亮部分
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;
}
原因:使用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;
}