【问题标题】:Determining the average distance of pixels (to the centre of an image) in OpenCV确定 OpenCV 中像素的平均距离(到图像中心)
【发布时间】:2013-08-09 06:26:24
【问题描述】:

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

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

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

我知道如何使用循环手动执行此操作,但由于我正在使用 Java,我宁愿将其卸载到一组本机的高性能 OpenCV 调用。

谢谢

【问题讨论】:

    标签: opencv


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      相关资源
      最近更新 更多