Python 如何在hsv中选择良好的上限和下限?

Python 如何在hsv中选择良好的上限和下限?,python,opencv,image-processing,rgb,hsv,Python,Opencv,Image Processing,Rgb,Hsv,我想检测花粉粒,但我正在生成的检测面具不起作用。以下是我得到的结果: 原始图像: HSV图像: 非工作遮罩: 首先,我将RGB图像转换为HSV。然后,我搜索目标轮廓。我无法使用cv.findcontours函数。如果你有另一个解决方案的想法,它会很有帮助。我还想计算花粉粒的数量 import cv2 as cv import numpy as np def rgb2hsv(rgb): """ Input: imagen RGB Output: i

我想检测花粉粒,但我正在生成的检测面具不起作用。以下是我得到的结果:

原始图像:

HSV图像:

非工作遮罩:

首先,我将RGB图像转换为HSV。然后,我搜索目标轮廓。我无法使用
cv.findcontours
函数。如果你有另一个解决方案的想法,它会很有帮助。我还想计算花粉粒的数量

import cv2 as cv
import numpy as np

def rgb2hsv(rgb):
       """
       Input: imagen RGB
       Output: imagen HSV
       """
       rgb = np.float32(rgb)/255
       R=rgb[:,:,0]
       G=rgb[:,:,1]
       B=rgb[:,:,2]
       rows,cols=R.shape

       Cmax=np.maximum(np.maximum(R,G),B)
       Cmin=np.minimum(np.minimum(R,G),B)
       delta= np.subtract(Cmax,Cmin)
       #print('delta:',delta)

       #Calculate Hue
       def hue(R,G,B):
               H= np.zeros((rows,cols),dtype=float)
               for row in range(rows):
                       for col in range(cols):
                               if (Cmax[row,col]==0):
                                       H[row,col]=0
                               elif (Cmax[row,col]==R[row,col]):
                                       H[row,col]=60*(((G[row,col]-B[row,col])/delta[row,col])%6)
                               elif (Cmax[row,col]==G[row,col]):
                                       H[row,col]=60*(((B[row,col]-R[row,col])/delta[row,col])+2)
                               elif (Cmax[row,col]==B[row,col]):
                                       H[row,col]=60*(((R[row,col]-G[row,col])/delta[row,col])+4)

               return H

       #Calculate Saturation
       def saturation(Cmax,delta):
               S= np.zeros((rows,cols),dtype=float)
               for row in range(rows):
                       for col in range(cols):
                               if (Cmax[row,col]==0):
                                       S[row,col]=0;
                               else:
                                       S[row,col]=delta[row,col]/Cmax[row,col]
               return S

       #Calculate Value
       V = Cmax.astype(np.float64)
       hsv=cv.merge((hue(R,G,B),saturation(Cmax,delta),V))
       return hsv


img = cv.imread('pollengrains.jpeg', 1)
cv.imshow('original', img)
hsv = rgb2hsv(img)

cv.imshow('hsv',hsv)
cv.imwrite('hsv.jpg',hsv*255)

mask = cv.inRange(hsv, (148,18,59),(168,38,139))
cv.imshow('mask',mask)
cv.imwrite('mask.jpg',mask*255)
cv.waitKey(0)
cv.destroyAllWindows()

在HSV颜色空间中使用Python GUI点选择器。搜索谷歌或这个论坛。我看过一些代码,但是一个点选取器只生成三个数字,我用两个元组选择一个H,S,V颜色作为低颜色,另一个H,S,V颜色作为高颜色。请参阅并在HSV颜色空间中使用Python GUI点选择器。搜索谷歌或这个论坛。我看过一些代码,但是一个点选取器只生成三个数字,我用两个元组选择一个H,S,V颜色作为低颜色,另一个H,S,V颜色作为高颜色。查看和