0

编辑:解决了,我必须通过使用访问像素

    (int)bw.at<uchar>(r,c)

对于学校的一个项目,我必须检测一个球并计算它的位置。我通过颜色分割来做到这一点:使用 inRange 检查球的颜色,我得到一个二值图像作为结果。至少我认为它是二进制的,因为当我显示它时图片是黑白的。

我现在尝试通过简单地取所有检测到的像素的 x 和 y 坐标的平均值来获取球的位置。奇怪的是,y 值是正确的,但 x 值是完全错误的。

这是我的代码:

    int k = 0;
    int x = 0;
    int y = 0;
    ofstream myfile;
    myfile.open ("example.txt");
    for(int c = 0; c < bw.cols; c++){
    for(int r = 0; r < bw.rows; r++){

            if(bw.at<int>(r,c) != 0){
                x += c;
                y += r;
                cout << "x: " << c << " y: " << r << endl;
                k++;
                myfile << 1;
            }else{
                myfile << 0;
            }
        }
        myfile << endl;
    }
    myfile.close();
    bal.set_pos(x/k,y/k);

我打印每个像素的 x 和 y 坐标,y 坐标是正确的,但 x 坐标分为 4 个不同的组,第一组的值在 88 左右,第二组的值在 248 左右,第三组 408,第四组 569。它们应该是但是在 350 到 360 之间。

4

0 回答 0