当前位置: 首页 > 面试题库 >

OpenCV:如何在轮廓/多边形内找到颜色?

公羊嘉
2023-03-14
问题内容

这是我所拥有的

im = cv2.imread('luffy.jpg')
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,0)

contours,h = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:

    // return color inside of the contour here
    mask = np.zeros(cnt.shape[:2],np.uint8)
    mean = cv2.mean(cant,mask)   // I think this is promising but so far it returns arrays with just zeros. I think its because I used np.zeros above to find the mask....
    moment = cv2.moments(cnt)   //maybe this will help?

我找不到内置的这种openCV函数。我想也许您可以随便做吗?我该如何实现?

编辑:与Zaw Lin给定的建议解决方案,我有此输入图像:

在此处输入图片说明

和此输出图像:

在此处输入图片说明


问题答案:

这将获得每个轮廓内的平均颜色,并将具有该颜色的轮廓绘制到最终图像。

import cv2
import numpy as np
im = cv2.imread('/home/zawlin/test.png')

gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
contours,h = cv2.findContours(gray,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

final = np.zeros(im.shape,np.uint8)
mask = np.zeros(gray.shape,np.uint8)

for i in xrange(0,len(contours)):
    mask[...]=0
    cv2.drawContours(mask,contours,i,255,-1)
    cv2.drawContours(final,contours,i,cv2.mean(im,mask),-1)

cv2.imshow('im',im)
cv2.imshow('final',final)
cv2.waitKey(0)


 类似资料:
  • 我有一个边缘被坎尼探测到。我想提取边缘的轮廓。 我已经检查了下面的帖子。OpenCV转换Canny边缘到轮廓。 但是它没有处理复杂的形状。例如,带矩形的圆或带线的圆。 cv::findContours()函数有两个问题。1.返回非闭合边的闭合轮廓,但我需要非闭合轮廓2。为闭合边返回2个闭合轮廓(可能其中一个轮廓用于边,另一个用于边的内侧,但我想要两个轮廓中的一个。 有没有办法解决这个问题?谢谢。

  • 我有一个OpenCV应用程序,它来自一个办公室内部(很多细节)的网络摄像头流,在那里我必须找到一个人工标记。标记是白色背景上的黑色正方形。我使用Canny找到边缘和cvFindContours进行轮廓绘制,然后approxPolyDP和co.进行过滤和查找候选对象,然后使用局部直方图进行进一步过滤,bla bla bla bla。。。 这或多或少是有效的,但不是我想要的。FindContours总

  • 我正在开发一个程序,提取拼图上的贴纸,然后再找到它们的RGB。目前,我正处于要删除任何非“方形”轮廓的位置。我想知道我怎么能做到这一点。 我所做的就是加载图像,使其变灰,模糊,精明的边缘检测,放大它,找到轮廓并绘制它们。 有没有一种方法可以让我在轮廓周围画出而不是填充它们?并删除周围大小不大致相同或几乎有90度角的轮廓? 这是初始图像: 以下是绘制轮廓的图像:

  • 我想,我很理解函数“cv2.FindOntours(图像、模式、方法)。但我在opencv的一个文档中得到了这个东西轮廓,层次=cv2.FindOntours(thresh,2,1)。我不明白这里2,1的含义以及为什么使用它们。请有人解释一下。

  • 本文向大家介绍如何使用Java OpenCV库查找图像轮廓?,包括了如何使用Java OpenCV库查找图像轮廓?的使用技巧和注意事项,需要的朋友参考一下 轮廓线不过是连接沿着特定形状的边界的所有点的线。使用这个你可以- 查找对象的形状。 计算对象的面积。 检测物体。 识别对象。 您可以使用findContours()方法找到图像中各种形状的轮廓,对象。此方法接受以下参数- 二进制图像。 类型为M

  • 我已经找到了轮廓,但问题是 findcontours() 以随机顺序返回轮廓,就像在 contour(0) 处,它从页面中间显示一些 sontour。如何对它们进行垂直排序?从上到下,然后从左到右?鉴于下图,我水平连接组件并将每个MCQ与其选择连接起来,然后应用findcontours(),现在我想按顺序对它们进行排序,以便按顺序检索它们

  • 我正在做一个应该作为地平线探测的项目。我使用精明的边缘和轮廓进行地平线检测。它工作得很好,但是我对边缘的小区域有问题 所以问题是,如何摆脱小面积的边缘/轮廓?或者我如何只显示一个最大的轮廓? 以下图片显示了它的外观: http://i.stack.imgur.com/f4USX.png 这张照片是用轮廓上的小区域拍摄的,我需要消除这些区域: http://i.stack.imgur.com/TQi

  • 我在location _ table(point _ location geometry)中存储了位置,现在我在谷歌地图上绘制了一个多边形,并将该多边形(几何)传递给后端,我想找到该多边形内的所有位置。 当我将多边形从谷歌地图传递到后端时,这给了我随机的结果。它没有给我多边形内的所有点。它给了我甚至在多边形之外的点。 在 postgis 中准确查找多边形内所有点的正确方法是什么(也包括边界情况)