编辑:解决了,我必须通过使用访问像素
(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 之间。