我试图找出如何在OpenCV中进行以下计算。
假设二值图像(黑/白):
白色像素与图像中心的平均距离。边缘附近大部分白色像素的图像得分较高,而中心附近大部分白色像素的图像得分较低。
我知道如何使用循环手动完成此操作,但是由于我正在使用Java,所以我宁愿将它卸载到一组高性能的OpenCV调用中,这些调用都是本机的。
谢谢
发布于 2013-08-08 22:26:24
distanceTransform()几乎是你想要的。不幸的是,它只计算到最近的黑色像素的距离,这意味着数据必须被按摩一点点。为了使distanceTransform()正常工作,图像中心只需要包含一个黑色像素。
我的方法如下:
distanceTransform()mean()计算平均距离。示例代码如下。它在C++中,但是您应该能够得到这样的想法:
cv::Mat img; // binary image
img.setTo(128, img == 0);
img.at<uchar>(img.rows/2, img.cols/2) = 0; // Set center point to zero
cv::Mat dist;
cv::distanceTransform(img, dist, CV_DIST_L2, 3); // Can be tweaked for desired accuracy
cv::Scalar val = cv::mean(dist, img == 255);
double mean = val[0];尽管如此,我建议您测试此方法实际上是否比循环中的迭代速度更快。为了适应API调用,该方法所做的处理比必要的要多一些。
https://stackoverflow.com/questions/18135857
复制相似问题