Οδυ*_*λης 2 python opencv filtering numpy image
我是 Python 世界的新手,也是编程的新手。我必须执行以下任务:我必须在我的电脑上截取屏幕截图,显示 Google 地图交通模式中的特定区域。
交通信息以 4 种颜色显示。这些颜色是绿色、橙色、红色和深红色。通过简单的程序我可以检查具体的颜色是什么。我的意思是精确值,例如B: 150, G:100, R:75。
我如何隔离(保留)这种颜色并使所有其他像素变为白色。我已经尝试过使用 HSV 掩蔽,但没有得到很好的结果。我也尝试过使用 trackbar 和 HSV,结果是一样的。我最常用的是 OpenCV、matplotlib、numpy...等。我强调,如果可能的话,我想要一个带有 RGB 的解决方案,比如循环所有像素并只保留具有特定颜色的像素。谢谢你!
我们需要的颜色:
orange R:255, G:151, B:77
green R:99, G:214, B:104
red R:242, G:60, B:50
Dark red R:129, G:31, B:31
Run Code Online (Sandbox Code Playgroud)
例子
import cv2
import numpy as np
image = cv2.imread('08.00am.Monday.png')
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
lower = np.array([2, 100, 100])
upper = np.array([75, 255, 255])
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower, upper)
output = cv2.bitwise_and(image,image, mask= mask)
cv2.imshow('image',output)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我们可以首先将每种颜色(红色、绿色、蓝色和深红色)分割为各自单独的蒙版cv2.inRange(),然后我们可以组合所有蒙版以生成单个图像,其中所有像素都具有红色、绿色、蓝色或深红色像素已标记。然后我们可以简单地将输入图像覆盖在白色画布上,在其中找到所需的像素。您可以查看以下代码以加深理解:
import cv2
import numpy as np
original_image = cv2.imread("/path/to/your/img.png")
t = 10 # tolerance
orange_thresh = cv2.inRange(original_image, np.array([77 - t, 151 - t, 255 - t]), np.array([77 + t, 151 + t, 255 + t]))
green_thresh = cv2.inRange(original_image, np.array([104 - t, 214 - t, 99 - t]), np.array([104 + t, 214 + t, 99 + t]))
red_1_thresh = cv2.inRange(original_image, np.array([50 - t, 60 - t, 242 - t]), np.array([50 + t, 60 + t, 242 + t]))
red_2_thresh = cv2.inRange(original_image, np.array([31 - t, 31 - t, 129 - t]), np.array([31 + t, 31 + t, 129 + t]))
combined_mask = orange_thresh + green_thresh + red_1_thresh + red_2_thresh
combined_mask_inv = 255 - combined_mask
combined_mask_rgb = cv2.cvtColor(combined_mask_inv, cv2.COLOR_GRAY2BGR)
final = cv2.max(original_image, combined_mask_rgb)
cv2.imwrite("./debug.png", final)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5492 次 |
| 最近记录: |