gpt4 book ai didi

opencv - 确定 OpenCV 中像素的平均距离(到图像的中心)

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:45 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何在 OpenCV 中进行以下计算。

假设一个二值图像(黑/白):

白色像素与图像中心的平均距离。大部分白色像素靠近边缘的图像得分较高,而大多数白色像素靠近中心的图像得分较低。

我知道如何使用循环手动执行此操作,但由于我使用的是 Java,所以我宁愿将其卸载到一组原生的高性能 OpenCV 调用中。

谢谢

最佳答案

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 调用所需的处理要多一些。

关于opencv - 确定 OpenCV 中像素的平均距离(到图像的中心),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18135857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com