gpt4 book ai didi

python - 如何使用 opencv trackbars 对三种颜色进行阈值处理?

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:42 27 4
gpt4 key购买 nike

我有一个任务说“使用轨迹栏选择三种颜色。将 Blob 涂成相应的颜色。”

我已经创建了轨迹栏,它们工作正常,但我该如何完成这项任务?不幸的是,他们在类里面没有给我们足够的信息来解决这个问题。

非常感谢您的合作。

import numpy as np
import cv2

# open the camera
cap = cv2.VideoCapture(0)

def nothing(x):
pass
cv2.namedWindow('result')

# Starting with 100's to prevent error while masking
h,s,v = 100,100,100

# Creating track bar


cv2.createTrackbar('h', 'result',0,179,nothing)
cv2.createTrackbar('s', 'result',0,255,nothing)
cv2.createTrackbar('v', 'result',0,255,nothing)

while True:

#read the image from the camera
ret, frame = cap.read()

#You will need this later
frame = cv2.cvtColor(frame, 35)



#converting to HSV
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)


# get info from track bar and appy to result
h = cv2.getTrackbarPos('h','result')
s = cv2.getTrackbarPos('s','result')
v = cv2.getTrackbarPos('v','result')


# Normal masking algorithm
lower_blue = np.array([h,s,v])
upper_blue = np.array([180,255,255])

mask = cv2.inRange(hsv,lower_blue, upper_blue)

result = cv2.bitwise_and(frame,frame,mask = mask)

cv2.imshow('result',result)

#find center
cnts=cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]

center=None

if len(cnts)>0:
c=max(cnts, key=cv2.contourArea)
((x,y),radius)=cv2.minEnclosingCircle(c)
M=cv2.moments(c)
center=(int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))

if radius>10:
#cv2.circle(frame, (int(x),int(y)), int(radius), 2)
cv2.circle(frame, center,5,(0,0,255),-1)



# color detection limits
lB = 5
lG = 50
lR = 50
hB = 15
hG = 255
hR = 255
lowerLimits = np.array([lB, lG, lR])
upperLimits = np.array([hB, hG, hR])

# Our operations on the frame come here
thresholded = cv2.inRange(frame, lowerLimits, upperLimits)
outimage = cv2.bitwise_and(frame, frame, mask = thresholded)


cv2.imshow('original', frame)

# Display the resulting frame
cv2.imshow('processed',outimage)




# Quit the program when Q is pressed
if cv2.waitKey(1) & 0xFF == ord('q'):
break

# When everything done, release the capture
print 'closing program'
cap.release()
cv2.destroyAllWindows()

最佳答案

如果你想做我想做的事,你可以很容易地使用:

N = 256/一个

图片/= N

图片 *= N

其中“a”是您希望在新图像中看到的颜色数量,我认为您需要导入 numpy 才能正常工作。我认为这是可行的,因为图像矩阵中的颜色数字被四舍五入到“a”框之一,在你的例子中是 3,然后当你用相同的数字乘以它时,它会按比例缩小到真实颜色。

对您来说可能为时已晚,但希望这对某人有所帮助。

编辑:当使用灰度时,这只会给出 3 种颜色,它在彩色图像上做了一些不同的事情

关于python - 如何使用 opencv trackbars 对三种颜色进行阈值处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com