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
Python 检测轮廓形状和内部颜色_Python_Opencv_Colors_Shape_Contour - Fatal编程技术网

Python 检测轮廓形状和内部颜色

Python 检测轮廓形状和内部颜色,python,opencv,colors,shape,contour,Python,Opencv,Colors,Shape,Contour,我不熟悉使用python的opencv,并尝试在图像中获得轮廓的形状。 仅考虑正方形、矩形、圆形和三角形等规则形状,是否有任何方法仅使用numpy和cv2库获得轮廓形状 我还想找到轮廓内的颜色。我怎么做 对于查找轮廓区域,有一个内置函数:cv2.contourArea(cnt)。 “轮廓形状”和“轮廓内颜色”是否也有内置功能? 请帮忙 注意:我正在考虑的图像包含多个规则形状。此方法可能更长,但现在它在我的头顶上。要查找轮廓形状,请使用findcontours函数,它将给出点的矢量作为输出(轮廓的

我不熟悉使用python的opencv,并尝试在图像中获得轮廓的形状。 仅考虑正方形、矩形、圆形和三角形等规则形状,是否有任何方法仅使用
numpy
cv2
库获得轮廓形状

我还想找到轮廓内的颜色。我怎么做

对于查找轮廓区域,有一个内置函数:
cv2.contourArea(cnt)
。 “轮廓形状”和“轮廓内颜色”是否也有内置功能? 请帮忙


注意:我正在考虑的图像包含多个规则形状。

此方法可能更长,但现在它在我的头顶上。要查找轮廓形状,请使用findcontours函数,它将给出点的矢量作为输出(轮廓的边界点)。现在使用力矩找到轮廓的中心

要查找轮廓,请使用此函数-

 cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) 
图像是canny的输出图像

根据力矩计算中心,请参阅此链接

计算等高线中存储的每个点距中心的距离 现在通过比较点到中心的距离对形状进行分类

1) -所有轮廓点与中心的距离大致相等

2) 正方形、矩形e-找到距离中心最远的4个点,这些点将是顶点,并且具有大致相同的距离。现在使用边长度区分正方形和矩形

3) traingles-对于不同类型的三角形,这可能很棘手,因此您可以在这里使用else条件,因为您只有4种形状

要查找颜色,请使用正方形、矩形和三角形的顶点创建遮罩

因为只有单色,所以在中心周围做一个小补丁,然后在那个里得到RGB像素的平均值。 假设你的中心在(100100),它是一个半径为20像素的圆。创建大小为10 X 10的面片,中心位于(100100),并在此面片中找到R、G和B值的平均值

对于红色R~255G~0和B~0

对于绿色R~0g~255和B~0

对于蓝色R~0 G~0和B~255


注意:opencv将值存储为BGR,而不是RGB。为了找到特定轮廓的形状,我们可以在轮廓周围绘制一个有界矩形。 现在我们可以比较轮廓面积和有界矩形面积。 如果轮廓面积等于有界矩形面积的一半,则形状为三角形。 如果轮廓面积小于有界矩形面积,但大于有界矩形面积的一半,则其为圆


注:此方法仅限于正三角形和圆。这不适用于六边形、七边形等多边形。

我得到了识别图像中形状的部分。有人能帮我识别轮廓内的颜色吗。注意:所有轮廓内的颜色都是单色而不是多色的,即在一个轮廓中,它只是红色、蓝色、绿色和黄色中的一种。关于“轮廓内的轮廓”,您可以使用
查找轮廓
返回表示所找到轮廓层次结构的结构。OpenCV对如何使用它有一个很好的解释。@Dan您误解颜色是轮廓。事实上,我想知道如何检测轮廓内的颜色。哦,你说得对,我的错:)一个简单的想法-对于每个轮廓,通过绘制填充有白色的轮廓多边形来创建一个遮罩图像。使用此遮罩仅从源图像中提取相应区域。在生成的图像中,迭代非零像素,收集唯一的颜色顺便说一句,给我们看一些你试图使用的输入图像样本。@DanMašek对不起,这些样本图像是保密的。我可以告诉你描述。它是一个正方形图像(300X300px),被分成9个相等的正方形部分。每个正方形段内部都有一个彩色形状。用于形状的颜色有红色、绿色、蓝色和黄色。使用的形状有正方形、矩形、三角形和圆形(形状不总是在同一区域)。我需要找到每个正方形内的图形的颜色和形状。谢谢你的想法。你能详细解释一下吗?因为我对这一切都不熟悉。我不知道如何正确使用这些函数。谢谢。我使用OpenCV C++,你必须自己来计算Python,这是一个非常聪明的边界框的用法。没有想过用这种方式!大拇指!