我正在尝试使用opencv框架平滑输出图像边缘,我正在尝试以下步骤。 步骤来自此处 https://dev59.com/WnPYa4cB1Zd3GeqPim6R#17175381
int lowThreshold = 10.0;
int ratio = 3;
int kernel_size = 3;
Mat src_gray,detected_edges,dst,blurred;
/// Convert the image to grayscale
cvtColor( result, src_gray, CV_BGR2GRAY );
/// Reduce noise with a kernel 3x3
cv::blur( src_gray, detected_edges, cv::Size(5,5) );
/// Canny detector
cv::Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );
//Works fine upto here I am getting perfect edge mask
cv::dilate(detected_edges, blurred, result);
//I get Assertion failed (src.channels() == 1 && func != 0) in countNonZero ERROR while doing dilate
result.copyTo(blurred, blurred);
cv::blur(blurred, blurred, cv::Size(3.0,3.0));
blurred.copyTo(result, detected_edges);
UIImage *image = [UIImageCVMatConverter UIImageFromCVMat:result];
我想知道是否我走在正确的路上,或者我缺少了什么?
感谢任何建议和帮助。
更新:
我得到了一张如下所示的grabcut算法生成的图像,现在我想对这张图像应用边缘平滑处理,因为你可以看到这张图像并不平滑。