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 如何使用OpenCV查找圆中的最大RGB值?_Python_Opencv_Image Processing - Fatal编程技术网

Python 如何使用OpenCV查找圆中的最大RGB值?

Python 如何使用OpenCV查找圆中的最大RGB值?,python,opencv,image-processing,Python,Opencv,Image Processing,我有一张9个水滴的图片,它们有不同的颜色强度(也就是说,它们都是绿色的,但绿色的深浅不同)。目标是: 识别9滴 查找相关值(大小、位置、RGB值等) 绘图数据 我正在使用SimpleBlobDetector识别点。这将输出关键点,其中包含每个blob的相关信息 但是,我不知道如何访问特定blob的RGB(或HSV)值。如何仅搜索blob中的像素以确定最小/最大/平均颜色值 非常感谢您的建议 这是我的全部代码。它只打印每个blob的x\u位置,y\u位置,以及区域。我还附上了我正在使用的文件:

我有一张9个水滴的图片,它们有不同的颜色强度(也就是说,它们都是绿色的,但绿色的深浅不同)。目标是:

  • 识别9滴
  • 查找相关值(大小、位置、RGB值等)
  • 绘图数据
我正在使用
SimpleBlobDetector
识别点。这将输出
关键点
,其中包含每个blob的相关信息

但是,我不知道如何访问特定blob的RGB(或HSV)值。如何仅搜索blob中的像素以确定最小/最大/平均颜色值

非常感谢您的建议

这是我的全部代码。它只打印每个blob的
x\u位置
y\u位置
,以及
区域
。我还附上了我正在使用的文件:

# Standard imports
import cv2
import numpy as np
from matplotlib import pyplot as plt

# Read image
filename= "C:\Users\Kevin\Pictures\Far 3.jpg"
img = cv2.imread(filename, 0)
img_color = cv2.imread(filename, cv2.IMREAD_ANYCOLOR)
img_c = cv2.resize(img_color,(800,600))
img1 = cv2.resize(img,(800,600))
ret,im = cv2.threshold(img1,120,255,cv2.THRESH_BINARY)

#######################################################
#######################################################

# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()

# Change thresholds
params.minThreshold = 50
params.maxThreshold = 150

# Filter by Area.
params.filterByArea = True
params.minArea = 150
params.maxArea = 400

# Filter by Circularity
params.filterByCircularity = True
params.minCircularity = 0.2

# Filter by Convexity
params.filterByConvexity = True
params.minConvexity = 0.1

# Filter by Inertia
params.filterByInertia = True
params.minInertiaRatio = 0.01

detector = cv2.SimpleBlobDetector_create(params)

#######################################################
#######################################################

# Detect blobs.
keypoints = detector.detect(im)

# Draw detected blobs as red circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob
im_with_keypoints = cv2.drawKeypoints(img_c, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# Show keypoints
cv2.imshow("Keypoints", im_with_keypoints)

x=[]
y=[]
area=[]

for i in xrange(9):
    xx = keypoints[i].pt[0]
    yy = keypoints[i].pt[1]
    aarea = keypoints[i].size
    print "PT.%f -- " %i, "x = %f," %xx, "y = %f," %yy,"area = %f," %aarea, "\n"

#######################################################
#######################################################
cv2.waitKey(0)


对于img中的每个像素,B、G、R值可以读取为:

B=img[xx,yy,0]
G=img[xx,yy,1]
R=img[xx,yy,2]

您可以获取一个blob中所有像素的平均B、G、R值,然后在blob中找到最大值

而不是使用SimpleBlobDetector,我将在HSV颜色空间中分割几乎绿色的blob。然后你会有一个面具来遮住所有的斑点。然后,您可以使用
findContours
检索每个掩码,并将
minMaxLoc
与每个blob的掩码一起使用。