C++ Opencv,查找像素值

C++ Opencv,查找像素值,c++,opencv,C++,Opencv,更新-在故障排除、反复试验的过程中,我把垫子弄错了。现在开始工作了 我想知道是否有人能帮我解决程序故障。以下是一些背景资料。我正处于编写一个程序的早期阶段,该程序将检测自动拾取和放置机器人传送带上的部件。现在我试着把一个倒置的部分和一个右侧向上的部分区分开来。我想我可以通过查询从零件中心点到特定半径和角度的像素来实现这一点。(即,如果像素1、2和3为黑色,则零件必须倒置) 以下是我迄今为止的截图: 下面是它有时工作的屏幕截图: 这里的目标是,如果像素是黑色的,画一个黑色的圆圈,如果是白色的,

更新-在故障排除、反复试验的过程中,我把垫子弄错了。现在开始工作了

我想知道是否有人能帮我解决程序故障。以下是一些背景资料。我正处于编写一个程序的早期阶段,该程序将检测自动拾取和放置机器人传送带上的部件。现在我试着把一个倒置的部分和一个右侧向上的部分区分开来。我想我可以通过查询从零件中心点到特定半径和角度的像素来实现这一点。(即,如果像素1、2和3为黑色,则零件必须倒置)

以下是我迄今为止的截图:

下面是它有时工作的屏幕截图:

这里的目标是,如果像素是黑色的,画一个黑色的圆圈,如果是白色的,画一个绿色的圆圈。如你所见,所有的圆圈都是黑色的。我可以偶尔得到一个绿色圆圈时,像素IM查询奠定了部分边缘,而不是在中间。在右边,您可以看到我正在阅读的黑白图像,名为“过滤器”

这是其中一个圆圈的代码。弧度是零件的方向,半径是距离“我的像素”查询的零件中心点的距离

// 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
    }
//check1是第一个像素查询的坐标
点检查1=点(位置x+半径*cos(弧度),位置y+半径*sin(弧度));标量强度1=过滤器。在(点(检查1));//像素应为0-255
如果(强度1.val[0]>50)
{
圆圈(截图,选中1,8,CV_RGB(0,255,0,2);//绿色圆圈
}
其他的
{
圆圈(截图,选中1,8,CV_RGB(0,0,0,2);//黑色圆圈
}
以下是我如何创建过滤垫的步骤

网络摄像头流- CVT颜色(bgr2hsv)- 高斯模糊--> 在范围内(我想变成8u)- 侵蚀- 扩张= 过滤垫(这是我使用FindOnTours的垫,也是像素查询。)


我还尝试了制作一个过滤器的副本,并在单独的垫子上使用findContours和像素查询,但没有成功。我不确定出了什么问题。如有任何建议,我们将不胜感激。我有一种感觉,我可能使用了不正确的mat格式

使用调试器检查filter.at的值,并确保该值合理。如果不是,你的过滤器可能不是8u。好的,几周前,我意识到当你试着“查找孔图”时,原来的垫子在一瞬间变暗,零件轮廓模糊。因为我想看到一个清晰的黑白图像,我创建了另一个垫子。长话短说,我把垫子弄乱了。现在开始工作了。