两个形状opencv之间的距离
Distance between two shapes opencv
有谁知道如何计算上方形状的蓝点直线向下到下方形状的边界之间的距离?
我有该点的坐标。
我试图逐点检查颜色,直到它到达下图的白色部分,但它消耗了太多硬件。 (我的positionY是从黑色部分开始的,但我可能做错了...)
while(true){
p = pixelColor.ptr<Point3_<uchar> >( positionY, positionX);
if((p->z==255)&&(p->y==255)&&(p->x==255)){
cout<<"Found"<<endl;
break;
}
positionY++;
}
你可以使用二分法,取一半高度的点,如果是黑色,则在下半部分工作,如果是白色,则在上半部分工作,然后做同样的事情,直到收敛。它是 O(log2(height))
,而你的是 O(height)
。但是,您可能会根据问题出现错误(例如:白色、黑色、白色、黑色交替出现的列。
您也可以在单个频道上工作。
但是,这是一个非常简单的循环,如果它消耗的硬件太多,剩下的很多事情你将无法完成。
由于图像很少有 1 个像素大小的显着变化,因此您可以每隔 n 个像素采样一次。但是,您的代码看起来不错,如果存在速度问题,请检查其他线程中是否存在内存泄漏或无限循环。
有谁知道如何计算上方形状的蓝点直线向下到下方形状的边界之间的距离? 我有该点的坐标。 我试图逐点检查颜色,直到它到达下图的白色部分,但它消耗了太多硬件。 (我的positionY是从黑色部分开始的,但我可能做错了...)
while(true){
p = pixelColor.ptr<Point3_<uchar> >( positionY, positionX);
if((p->z==255)&&(p->y==255)&&(p->x==255)){
cout<<"Found"<<endl;
break;
}
positionY++;
}
你可以使用二分法,取一半高度的点,如果是黑色,则在下半部分工作,如果是白色,则在上半部分工作,然后做同样的事情,直到收敛。它是 O(log2(height))
,而你的是 O(height)
。但是,您可能会根据问题出现错误(例如:白色、黑色、白色、黑色交替出现的列。
您也可以在单个频道上工作。
但是,这是一个非常简单的循环,如果它消耗的硬件太多,剩下的很多事情你将无法完成。
由于图像很少有 1 个像素大小的显着变化,因此您可以每隔 n 个像素采样一次。但是,您的代码看起来不错,如果存在速度问题,请检查其他线程中是否存在内存泄漏或无限循环。