如何检测检测到的形状 OpenCV 的颜色

Erd*_*l.J 5 python opencv colors object-detection color-detection

我编写了下面的代码来检测图像中的 3D 形状,并且它工作正常。

现在我需要检测形状内的颜色并计算它们。

谁能指出我应该从哪里开始进行颜色检测?

下面的形状检测代码,也许会有用:

import cv2
import numpy as np

cv2.imshow('Original Image',rawImage) 
cv2.waitKey(0)

hsv = cv2.cvtColor(rawImage, cv2.COLOR_BGR2HSV)
cv2.imshow('HSV Image',hsv)
cv2.waitKey(0)

hue ,saturation ,value = cv2.split(hsv)
cv2.imshow('Saturation Image',saturation)
cv2.waitKey(0)

retval, thresholded = cv2.threshold(saturation, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('Thresholded Image',thresholded)
cv2.waitKey(0)

medianFiltered = cv2.medianBlur(thresholded,5)
cv2.imshow('Median Filtered Image',medianFiltered)
cv2.waitKey(0) 

cnts, hierarchy = cv2.findContours(medianFiltered, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for c in cnts:
# compute the center of the contour
M = cv2.moments(c)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])


first = cv2.drawContours(rawImage, [c], -1, (0, 255, 0), 2)
second =cv2.circle(rawImage, (cX, cY),1 , (255, 255, 255), -1)


cv2.imshow('Objects Detected',rawImage)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,形状的中心成立,当我们打印(第二次)时,我们得到所有像素的输出但是我只需要从轮廓内部的像素输出,用这种方法是不可能从轮廓内部的像素获取值吗?

Kin*_*t 金 5

基本思想:

(1) Convert the image to HSV color space;
(2) Threahold the `S` to find color regions;
(3) Calculate average hsv for each color-region-maskin HSV, then convert into BGR.
Run Code Online (Sandbox Code Playgroud)

对于图像:

在此输入图像描述

(1) Convert the image to HSV color space:
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(2) Threahold the `S` to find color regions:
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(3) Calculate average hsv for each color-region-maskin HSV, then convert into BGR.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


一些链接可能有用:

1. just detect color regions: 
Run Code Online (Sandbox Code Playgroud)

(1)如何使用OpenCV检测图像中的色块?

(2) OpenCV C++/Obj-C:检测一张纸/正方形检测

2. detect specific color in HSV:
Run Code Online (Sandbox Code Playgroud)

(1) 对于绿色:如何定义阈值以仅检测图像中的绿色对象:Opencv

(2) 对于橙色:使用`cv::inRange` (OpenCV) 选择正确的 HSV 上下边界进行颜色检测

H(3)红色部分:如何使用OpenCV找到红色区域?

3. If you want to crop polygon mask:
Run Code Online (Sandbox Code Playgroud)

(1) 使用 Opencv python 从图像中裁剪凹多边形