我正在处理如图 1 所示的图像,该图像由点数组组成,需要转换为图 2。
图1 原图
Fig.2 想要的图像
为了完成转换,我首先检测edge
每个点的 ,然后操作dilation
。选择合适的参数后,结果令人满意,如图 3 所示。
图3 膨胀后的图像
我之前在 MATLAB 中处理过相同的图像。当将对象(图 3 中)缩小为像素时,函数bwmorph(Img,'shrink',Inf)
起作用,结果正是图 2 的来源。那么如何在opencv中获得相同的想要的图像呢?好像没有类似的shrink
功能。
这是我查找边缘和膨胀操作的代码:
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
using namespace cv;
// Global variables
Mat src, dilation_dst;
int dilation_size = 2;
int main(int argc, char *argv[])
{
IplImage* img = cvLoadImage("c:\\001a.bmp", 0); // 001a.bmp is Fig.1
// Perform canny edge detection
cvCanny(img, img, 33, 100, 3);
// IplImage to Mat
Mat imgMat(img);
src = img;
// Create windows
namedWindow("Dilation Demo", CV_WINDOW_AUTOSIZE);
Mat element = getStructuringElement(2, // dilation_type = MORPH_ELLIPSE
Size(2*dilation_size + 1, 2*dilation_size + 1),
Point(dilation_size, dilation_size));
// Apply the dilation operation
dilate(src, dilation_dst, element);
imwrite("c:\\001a_dilate.bmp", dilation_dst);
imshow("Dilation Demo", dilation_dst);
waitKey(0);
return 0;
}