更新 - 在故障排除,试验和错误的过程中,我的垫子混乱了。它现在正在工作
我想知道是否有人可以帮我解决我的程序问题。这是一些背景知识。我正处于编写程序的早期阶段,该程序将沿传送带检测零件,以便自动拾取和放置机器人。现在我正在尝试将颠倒部分区分为右侧部分。我想我可以通过查询零件中心点的某个半径和角度的像素来做到这一点。 (即,如果像素1,2和3为黑色,则部分必须颠倒)
这是我到目前为止的截图:
以下是有时正常工作的屏幕截图:
这里的目标是如果像素为黑色,则画一个黑色圆圈,如果是白色,则画一个绿色圆圈。如您所见,所有圆圈都是黑色的。当我查询的像素位于零件边缘时,我偶尔可以得到一个绿色圆圈,但不是在中间。在右侧,您可以看到我正在阅读的黑白图像,名为“过滤器”。
以下是其中一个圈子的代码。 Radian是零件的方向,radius是我的像素查询远离零件中心点的距离。
// check1 is the coordinate for 1st pixel query
Point check1 = Point(pos.x + radius * cos(radian), pos.y + radius* sin (radian)); Scalar intensity1 = filter.at<uchar>(Point(check1)); // pixel should be 0-255
if (intensity1.val[0]>50)
{
circle(screenshot, check1, 8, CV_RGB(0, 255, 0), 2); //green circle
}
else
{
circle(screenshot, check1, 8, CV_RGB(0, 0, 0), 2); //black circle
}
以下是我创建过滤垫的步骤
网络摄像头流 - cvtcolor(bgr2hsv) - GaussianBlur - &gt; inRange(我觉得变成了8u) - 侵蚀 - 扩张= 过滤垫(这是我使用findContours的垫子,也是像素查询。)
我还尝试制作过滤器的副本,并在单独的垫子上使用findContours和像素查询而没有运气。我不确定是什么问题。任何建议表示赞赏。我有一种感觉,我可能会使用不正确的mat格式。