我正在使用openCV开发iOS应用程序,从显示器拍摄照片并提取曲线,但是当图像在阈值处理后有一些明亮的区域时,我不会得到完整的曲线但是有些黑色区域< / p>
processed image after thresholding
original = [MAOpenCV cvMatGrayFromUIImage:_sourceImage];
cv::threshold(original, original, 70, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
findContours(original, contours, hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );
cv::Mat skel(original.size(), CV_8UC1, cv::Scalar(0));
int idx = 0;
for(; idx >= 0; idx = hierarchy[idx][0])
{
if (contours[idx].size()>250 && idx>-1){
cv::Scalar color( 255,255,255);
drawContours(skel, contours, idx, color, CV_FILLED, 8, hierarchy);
}
}
cv::threshold(skel, skel, 100, 255, CV_THRESH_BINARY_INV);
cv::erode(skel,skel,cv::Mat(),cv::Point(-1,-1),2);
因此,当图像有一些像示例
这样的明亮区域时,如何处理图像以提取曲线答案 0 :(得分:0)
当背景光线不均匀时,您可能需要首先应用白色Top-Hat(或here for MatLab和here for OpenCV)。
Here is the result我使用了半径为3的disk类型的结构元素。
然后,无论你选择什么样的阈值方法都可以。
答案 1 :(得分:0)