Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两个形状之间的距离opencv_C++_Opencv_Distance_Measure - Fatal编程技术网

C++ 两个形状之间的距离opencv

C++ 两个形状之间的距离opencv,c++,opencv,distance,measure,C++,Opencv,Distance,Measure,有人知道如何计算上部形状的蓝色点到下部形状边界之间的距离吗? 我有点的坐标。 我试着一点一点地检查颜色,直到它到达下图的白色部分,但是它消耗了太多的硬件。(我从黑色部分开始定位,但我可能做错了什么…) while(true){ p=像素颜色.ptr(位置Y,位置X); 如果((p->z==255)和&(p->y==255)和&(p->x==255)){ cout你可以使用二分法,你取一个高度的一半,如果是黑色,你在下半部分工作,如果是白色,你在上半部分工作,然后你也这样做,直到你收敛。当你的是

有人知道如何计算上部形状的蓝色点到下部形状边界之间的距离吗? 我有点的坐标。 我试着一点一点地检查颜色,直到它到达下图的白色部分,但是它消耗了太多的硬件。(我从黑色部分开始定位,但我可能做错了什么…)

while(true){
p=像素颜色.ptr(位置Y,位置X);
如果((p->z==255)和&(p->y==255)和&(p->x==255)){

cout你可以使用二分法,你取一个高度的一半,如果是黑色,你在下半部分工作,如果是白色,你在上半部分工作,然后你也这样做,直到你收敛。当你的是
O(log2(高度))
时,它是
O(高度)
。但是,你可能会根据问题得到错误(例如:具有白色、黑色、白色、黑色交替的列

您也可以在单个通道上工作


然而,这是一个非常简单的循环,如果它消耗了太多的硬件,那么剩下的部分你将无法完成很多事情。

因为很少有图像有1个像素大小的实质性变化,你可以每N个像素采样一次。但是,你的代码看起来很好,如果有速度问题,请检查其他图像中的内存泄漏或无限循环线程。

请注意,
p->z=0
正在将0赋值给
p->z
。您需要执行
p->z==0
。Idem表示
y
x
。是否只检查一列?已修复。是的,我只需要到达底部形状的边界。这是一项很好的技术,但您必须小心。黑色像素可能意味着n您位于白色斑点之间的黑色区域,或者您位于第二个斑点之后的黑色区域。类似地,白色像素可能表示您位于第一个斑点,或者可能位于第二个斑点。
while(true){
        p = pixelColor.ptr<Point3_<uchar> >( positionY, positionX);
        if((p->z==255)&&(p->y==255)&&(p->x==255)){
            cout<<"Found"<<endl;
            break;
        }
        positionY++;
}