Thi*_*ili 6 c++ opencv image-processing
我有使用墨水和纸张拍摄的掌纹图像,如下图(a)所示.
我需要的是突出它的折痕,保留它们的宽度和方向,见图(b).

我尝试使用具有不同阈值的Canny,Laplacian和Sobel算子等边缘检测器,但不能像(b)中那样提出清晰的折痕图.但是当使用上述边缘检测器时,所有黑线都被检测为边缘.我想要的只是突出图像的较粗白线(a).我正在使用OpenCV 2.4.5.有人可以帮忙吗?谢谢.
这是我想出的方法:
cv::Mat im; //Already loaded
cv::Mat grey;
cv::cvtColor(im, grey, CV_BGR2GRAY);
cv::Mat binary;
cv::threshold(grey, binary, 0, 255, cv::THRESH_OTSU);
//Create a mask of the hand region
cv::Mat mask;
cv::Mat kern = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(20,20)); //Large kernel to remove all interior detail
cv::morphologyEx(binary, mask, cv::MORPH_OPEN, kern);
cv::threshold(mask, mask, 128, 255, cv::THRESH_BINARY_INV); //Invert colors
cv::imshow("", mask);
//Remove thin lines
cv::Mat blurred;
cv::GaussianBlur(grey, blurred, cv::Size(9,9), 0);
cv::threshold(blurred, binary, 0, 255, cv::THRESH_OTSU);
cv::morphologyEx(binary, binary, cv::MORPH_OPEN, cv::noArray());
cv::Mat result;
binary.copyTo(result, mask);
Run Code Online (Sandbox Code Playgroud)
结果如下:
掩模边缘存在一些伪影,可以通过使用更复杂的掩模方法来修复。显然可以针对不同的细节级别修改模糊和形态操作的内核大小。
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |