tho*_*mas 5 c++ opencv image-processing
我想使用函数distanceTransform()来查找非零像素到零像素的最小距离,以及最近零像素的位置.我调用函数的第二个版本,并将labelType标志设置为DIST_LABEL_PIXEL.一切正常,我得到最接近零像素的距离和指数.
现在我想将索引转换回像素位置,我认为索引将像idx =(row*cols + col)或类似的东西,但我必须发现OpenCV只计算零像素并使用此计数作为指数.因此,如果我得到123作为最近像素的索引,这意味着第123个零像素是最接近的.
OpenCV如何计算它们?可能是以行方式?
有没有一种有效的方法将指数映射回位置?显然,如果我知道OpenCV如何计算它们,我可以重新计算它们并跟踪计数和位置,但这看起来很愚蠢而且效率不高.
是否有充分的理由使用他们使用的索引?我的意思是,使用绝对索引有什么优势吗?
提前致谢.
编辑:
如果你想看看我的意思,你可以运行:
Mat mask = Mat::ones(100, 100, CV_8U);
mask.at<uchar>(50, 50) = 0;
Mat dist, labels;
distanceTransform(mask, dist, labels, CV_DIST_L2, CV_DIST_MASK_PRECISE, DIST_LABEL_PIXEL);
cout << labels.at<int>(0,0) << endl;
Run Code Online (Sandbox Code Playgroud)
您将看到所有标签都是1,因为只有一个零像素,但我应该如何找到该信息的位置(50,50)?
零像素也被标记 - 它们将具有与它们最接近的非零像素相同的标签.
因此,您将拥有一个2D数组标签,其大小与源图像相同.如果检查源图像中的所有零像素,则可以从返回的2D数组中找到关联的标签.然后,这可以通过匹配标签来查找与每个零像素相关联的非零像素.
如果你明白我的意思.
| 归档时间: |
|
| 查看次数: |
1869 次 |
| 最近记录: |