[PYTHON] Python과 OpenCV를 사용하여 붉은 색 찾기
PYTHONPython과 OpenCV를 사용하여 붉은 색 찾기
이미지에서 붉은 색을 추출하려고합니다. 지정된 범위의 값만 남겨두기 위해 임계 값을 적용하는 코드가 있습니다.
img=cv2.imread('img.bmp')
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,50,50]) #example value
upper_red = np.array([10,255,255]) #example value
mask = cv2.inRange(img_hsv, lower_red, upper_red)
img_result = cv2.bitwise_and(img, img, mask=mask)
하지만, 내가 확인했듯이, 빨강은 범위에서 색조 값을 가질 수 있습니다. 0에서 10까지, 170에서 180까지의 범위를 말합니다. 따라서이 두 범위 중 하나에서 값을 남기고 싶습니다. 나는 임계 값을 10에서 170으로 설정하고 cv2.bitwise_not 함수를 사용하여 시도했지만 그 다음에는 모든 흰색 색상도 얻는다. 가장 좋은 방법은 각 범위의 마스크를 만들고 둘 다 사용하는 것입니다. 그래서 진행하기 전에 어떻게 든 함께 결합해야합니다.
OpenCV를 사용하여 두 개의 마스크를 결합 할 수있는 방법이 있습니까? 아니면 내 목표를 달성 할 수있는 다른 방법이 있습니까?
편집하다. 나는 우아하지는 않지만 작동하는 해결책을 가지고왔다.
image_result = np.zeros((image_height,image_width,3),np.uint8)
for i in range(image_height): #those are set elsewhere
for j in range(image_width): #those are set elsewhere
if img_hsv[i][j][1]>=50 \
and img_hsv[i][j][2]>=50 \
and (img_hsv[i][j][0] <= 10 or img_hsv[i][j][0]>=170):
image_result[i][j]=img_hsv[i][j]
OpenCV의 기능은 거의 나의 필요를 충족시키고 OpenCV의 기능은 거의 비슷하지만, 더 나은 방법이 있다면 (전용 기능을 사용하고 코드를 적게 쓰면) 나와 공유하십시오. :)
해결법
-
==============================
1.마스크를 함께 추가하고 np.where를 사용하여 원본 이미지를 가릴 수 있습니다.
마스크를 함께 추가하고 np.where를 사용하여 원본 이미지를 가릴 수 있습니다.
img=cv2.imread("img.bmp") img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # lower mask (0-10) lower_red = np.array([0,50,50]) upper_red = np.array([10,255,255]) mask0 = cv2.inRange(img_hsv, lower_red, upper_red) # upper mask (170-180) lower_red = np.array([170,50,50]) upper_red = np.array([180,255,255]) mask1 = cv2.inRange(img_hsv, lower_red, upper_red) # join my masks mask = mask0+mask1 # set my output img to zero everywhere except my mask output_img = img.copy() output_img[np.where(mask==0)] = 0 # or your HSV image, which I *believe* is what you want output_hsv = img_hsv.copy() output_hsv[np.where(mask==0)] = 0
이미지의 각 픽셀을 루핑하는 것보다 훨씬 빠르고 읽을 수 있어야합니다.
from https://stackoverflow.com/questions/30331944/finding-red-color-using-python-opencv by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python으로 Selenium에서 프로그래밍 방식으로 파이어 폭스 헤드리스를 만드는 방법은 무엇입니까? (0) | 2018.11.02 |
---|---|
[PYTHON] 세트의 모든 부분 집합을 얻는 방법? (powerset) (0) | 2018.11.02 |
[PYTHON] Python으로 구동되는 PhantomJS / Selenium의 CSS / 기타 리소스 다운로드 방지 (0) | 2018.11.02 |
[PYTHON] 파이썬으로 UUID v1에서 시간 추출하기 (0) | 2018.11.02 |
[PYTHON] 파이썬 : __getattr __ ()을 구현하는 방법? (0) | 2018.11.02 |