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

我试图找出如何在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调用所需的处理要多一点。

    链接地址: http://www.djcxy.com/p/89755.html

    上一篇: Determining the average distance of pixels (to the centre of an image) in OpenCV

    下一篇: OpenCV default storage format