一、消除黑点
- 因为大部分黑点处于暗处,我们可以通过降低V值的下限来滤除掉,如V值下限由原来的50调整为15
- 黑点已经无法通过V的调整来去除的时候,可以采用膨胀、腐蚀等手段来消除独立的白点或黑点。
二、颜色替换
- 比如改成黄色,这个同样也是要在HSV颜色空间操作的。
- 在这里使用createTrackbar函数对hsv进行进行调整
cv2.createTrackbar(trackbarName, windowName, value, count, onChange)
- trackbarName:可拖动条的名称,字符串类型。
- windowName:可拖动条所在的窗口名称,字符串类型。
- value:可拖动条的默认值,整型。
- count:可拖动条的最大值,整型。
- onChange:当可拖动条的值发生变化时调用的回调函数,函数类型。
三、程序
import cv2
import numpy as np
def nothing(x):
pass
#通过OpenCV读取图片信息
img = cv2.imread("d:\\OpenCVpic\\happyfish.jpg")
img = cv2.resize(img,(500,500))
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.imshow("img", img)
# HSV 的下界限
lower_green = np.array([35,70,15])
# HSV 的上界限
upper_green = np.array([70,255,255])
cv2.namedWindow('img2',cv2.WINDOW_NORMAL)
cv2.createTrackbar('H','img2',140,180,nothing)
cv2.createTrackbar('S','img2',100,180,nothing)
cv2.createTrackbar('V','img2',117,180,nothing)
rows,cols,channels = img.shape
while(1):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_green, upper_green)
#将制定像素点的数据设置为0, 要注意的是这三个参数对应的值是Blue, Green, Red。
h = cv2.getTrackbarPos('H', 'img2')
s = cv2.getTrackbarPos('S', 'img2')
v = cv2.getTrackbarPos('V', 'img2')
for r in range(rows):
for c in range(cols):
if mask[r, c] == 255:
hsv.itemset((r, c, 0), hsv.item(r, c, 0) -h)
hsv.itemset((r, c, 1), hsv.item(r, c, 1) +90-s)
hsv.itemset((r, c, 2), hsv.item(r, c, 2) +90-v)
img2 = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
#将图像进行输出,使用show()也是可以显示的。
img = cv2.resize(img, (500, 500))
cv2.imshow("img2", img2)
k = cv2.waitKey(1)&0xFF
if k == 27: #esc exit
break
#cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:绿色换成黄色
四、资料
「黑夜寻白天」的博客:
https://blog.csdn.net/weixin_44598554/article/details/130627957
网友评论