首页 > 其他 > 详细

图片的开操作

时间:2020-03-31 14:37:22      阅读:61      评论:0      收藏:0      [点我收藏+]

图片的开操作

  • 开 = 腐蚀 + 膨胀
  • 用于保留原结构, 去除干扰块
    opencv中有相关的API
CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,
                                int op, InputArray kernel,
                                Point anchor = Point(-1,-1), int iterations = 1,
                                int borderType = BORDER_CONSTANT,
                                const Scalar& borderValue = morphologyDefaultBorderValue() );

当op参数为 MORPH_OPEN 就是一次开操作

For instance, an opening operation (#MORPH_OPEN) with two iterations is equivalent to apply
successively: erode -> erode -> dilate -> dilate (and not erode -> dilate -> erode -> dilate)

我自定义了一次:erode -> dilate

void morphologyOpenDemo(Mat& original, int shape, cv::Size size, cv::Point anchor);
void morphologyOpenDemo(Mat& original,int shape,cv::Size size,cv::Point anchor) 
{	
	if (original.empty()) 
	{
		cout << " can`t get this ph" << endl;
	}
	namedWindow("open_source_win",WINDOW_FREERATIO);
	imshow("open_source_win",original);
	Mat kernel = getStructuringElement(shape, size, anchor);
	Mat erode_result;
	erode(original, erode_result, kernel);
	Mat dst;
	dilate(erode_result, dst, kernel);
	namedWindow("open_dst_win", WINDOW_FREERATIO);
	imshow("open_dst_win", dst);
}

实验效果:
技术分享图片
图片前后结构基本不变,画框部分干扰部分已经去除。

直接调用的结果示意图:
技术分享图片

这里我迭代了两次,干扰部分基本完全消失。

        Mat dst;
	morphologyEx(src,dst,MORPH_OPEN,kernel,Point(-1,-1),2);
	imshow("open_dst", dst);

开操作 提取细节

  • 细节 = 原图 -开操作
	Mat kernel = getStructuringElement(MORPH_RECT,Size(3,3),Point(-1,-1));
	Mat dst;
	morphologyEx(src,dst,MORPH_OPEN,kernel,Point(-1,-1),2);
	imshow("open_dst", dst);

	Mat detail;
	subtract(src,dst,detail);
	imshow("open_detail", detail);

技术分享图片

开操作去除干扰

先二值化然后开操作,这里二值化可以随意选择Canny之类,类梯度都可以。

	Mat gray, binary;
	cvtColor(src, gray, COLOR_BGR2GRAY);
	threshold(gray,binary,0,255,THRESH_BINARY_INV|THRESH_OTSU);
	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
	imshow("binary_win", binary);
	Mat dst;
	morphologyEx(binary, dst, MORPH_OPEN, kernel, Point(-1, -1), 1);
	imshow("dst_win",dst);

实验效果:
技术分享图片
技术分享图片
技术分享图片
技术分享图片

本节代码地址:https://github.com/cyssmile/openCV_learning_notes/blob/master/opencv_test/opencv_036/opencv_036.cpp

图片的开操作

原文:https://www.cnblogs.com/cyssmile/p/12604762.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!