如何在opencv中查找图像内像素之间的欧几里得距离

巴拉
int main(){
    Mat cmp, Ref, Diff;
    cmp = imread("image1.tif", CV_LOAD_IMAGE_UNCHANGED);
    Ref = imread("image2.tif", CV_LOAD_IMAGE_UNCHANGED);
    ShiftChk(cmp, Ref);
    absdiff(cmp, Ref, Diff);
    imshow("difference image", Diff);
    waitKey(0);
    double min, max;
    minMaxLoc(Diff, &min, &max);
    Point min_loc, max_loc;
    minMaxLoc(Diff, &min, &max, &min_loc, &max_loc);
    Size sz = Diff.size();
    cout << "max val : " << max << endl;//5
    cout << "max val: " << max_loc << endl; //[26,38]


    vector<vector<double>>test;
    for (int i = 0; i < Diff.cols; i++) {
        for (int j = 0; j < Diff.rows; j++) {

            Point difference = Diff.at<uchar>(26, 38) - Diff.at<uchar>(j, i);
            double dist = sqrt(difference.x*difference.x + difference.y*difference.y);              
            test.push_back(dist);
        }
    }
}

我试图找到图像中单个点到所有其他像素之间的欧几里得距离。距离值将存储在矢量测试中,但其中显示出一些误差。而且我也不知道我使用的逻辑是否正确,可以给出正确的答案(欧几里德距离)。谁能帮我吗。提前致谢

错误信息是:

error C2664: 
'void std::vector<std::vector<double,std::allocator<_Ty>>,std::allocator<std::vector<_Ty,std::allocator<_Ty>>>>::push_back(const std::vector<_Ty,std::allocator<_Ty>> &)' : 
cannot convert argument 1 from 'double' to 'std::vector<double,std::allocator<_Ty>> &&' 
三木

有两个主要问题:

  1. 您将值附加到test向量错误。您需要创建一个中间矢量并将push_back创建test(如@ 0X0nosugar answer所示),或者更好地使用正确的尺寸初始化矢量并将其值放置在正确的位置。

    vector<vector<double>> test(Diff.rows, vector<double>(Diff.cols));
    for (int i = 0; i < Diff.rows; i++) {
        for (int j = 0; j < Diff.cols; j++) {
            test[i][j] = ...       
        }
    }
    

    如上面的代码片段所示,按行扫描更好(更快),因为OpenCV按行存储图像。

  2. 您不是在计算两点之间的距离。实际上,您是在两个给定的点上取值之差,并Point由此创建一个对象(这没有任何意义)。您也可以避免显式计算欧几里德距离。您可以使用cv::norm

     test[i][j] = norm(Point(38, 26) - Point(j, i)); // Pay attention to i,j order!
    

放在一起:

Point ref(38, 26);
vector<vector<double>> test(Diff.rows, vector<double>(Diff.cols));
for (int i = 0; i < Diff.rows; i++) {
    for (int j = 0; j < Diff.cols; j++) {
        test[i][j] = norm(ref - Point(j,i));      
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

opencv查找从特定点到图像中每个像素的距离?

如何在OpenCV和C +++中找到图像中两个对象(点)之间的距离(以m和像素为单位的物理距离)?

在python opencv中从其值(欧几里得距离)检索图像

查找图像中所有像素对之间的距离

在 Opencv 中查找点之间的距离

OpenCV:如何在C ++中查找轮廓内的像素

如何在opencv中制作颜色渐变的距离图像(Python)

如何计算熊猫与列表之间的欧几里得距离?

如何计算向量之间的欧几里得距离?

如何使用python和opencv在图像上绘制两个轮廓,给定它们之间的轮廓距离为100像素

查找所有点对之间的欧几里得距离

如何计算轮廓内像素的黑/白比

如何计算ND4J中两个INDArrays向量之间的欧几里得距离?

如何计算矩阵中两个元素之间的最大欧几里得距离-R?

如何减少div中图像之间的距离?

如何在OpenCV中的CV_32FC1和CV_32FC3图像之间进行逐像素倍数

如何在opencv中的指定行之间裁剪部分图像

算法问题,如何在python和opencv中查找以角度代码为边界的像素数

如何在Android中离线查找两个地理位置之间的道路距离

如何在Python中使用OpenCv裁剪图像中的小像素区域

如何在 python OpenCV 中逐个像素地有效循环图像?

如何在c中读取图像的像素?

如何在iOS中获取图像像素

OpenCV距离转换中的像素索引

检测图像中的最大像素距离

如何使用外部乘积计算R中的成对欧几里得距离

如何计算 r 中 NA 值的欧几里得距离

如何从numpy中的指定数组获取欧几里得距离?

如何计算 R 中 n 维的欧几里得距离?