Python은 다각형 다각형 cv2.fillPoly() 및 cv2.fillConvexPoly()를 기반으로 마스크 이미지 문제를 생성합니다.

위 그림은 요구 사항을 설명합니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

그려진 다각형을 기준으로 마스크(즉 흰색 영역) 이미지를 생성하는 것이 목표이며 생성된 이미지의 크기는 원본 이미지의 크기와 일치해야 하며 해당 위치에 마스크가 생성됩니다.

처리 방법:
1. 그려진 다각형의 각 꼭지점 좌표를 읽습니다. 필요한 것은 이미지의 픽셀 좌표입니다.
2. 후속 사용을 위해 원본 그림의 크기와 일치하는 0 또는 1의 그림을 생성합니다.
3. cv2 라이브러리에 따르면 fillPoly 함수는 이미지의 해당 다각형 위치를 모두 0 또는 모두 1로 채웁니다.
4. 채운 후 마스크된 이미지 cv2.imwrite를 출력합니다.

이상이 기본적인 과정이고, 파이썬 코드가 나올 준비가 되어있습니다.

참고할 문제:

이미지에 출력할 다각형 마스크가 여러 개 있을 수 있습니다. 동일한 이미지에서 마스크 출력을 생성하려면 다각형을 횡단하는 데 주의하세요.

이 기간 동안 내가 겪은 문제는 다음과 같습니다.

opencv에는 다각형 영역을 픽셀로 채울 수 있는 두 가지 함수, 즉 cv2.fillConvexPoly() 및 cv2.fillPoly()가 포함되어 있습니다. 두 함수는 약간 다르기 때문에 생성된 결과의 효과에 차이가 있습니다. 왼쪽은 cv2.fillConvexPoly입니다. (
여기에 이미지 설명을 삽입하세요.
) 의 출력 결과, 오른쪽은 cv2.fillPoly()의 출력 결과입니다.
왼쪽의 이미지는 다각형의 가장자리를 정확하게 묘사할 수 있지만 다각형 내부의 일부 영역은 픽셀을 정확하게 채울 수 없어 마스크 생성이 실패하는 반면 오른쪽의 다른 함수의 생성 효과는 완벽하게 나타나는 것을 볼 수 있습니다
. 다각형의 면적과 일치합니다.

두 가지 함수에 대해: (정보를 검색한 후 메모하겠습니다.)
1. cv2.fillConvexPoly() 함수는 볼록 다각형을 채우는 데 사용할 수 있으며 볼록 다각형의 꼭지점만 제공하면 됩니다.

img = np.zeros((1080, 1920, 3), np.uint8)
triangle = np.array([[0, 0], [1500, 800], [500, 400]])
 
cv2.fillConvexPoly(img, triangle, (255, 255, 255))
 
cv2.imwrite('./1.jpg',img)

2. cv2.fillPoly() 함수는 모든 모양의 그래픽을 채우는 데 사용할 수 있습니다. 다각형을 그리는 데 사용할 수 있습니다. 작업에서는 곡선을 근사화하기 위해 많은 가장자리를 사용하는 경우가 많습니다. cv2.fillPoly() 함수는 여러 개를 채울 수 있습니다. 한 번에 모양을 만들고 그래픽을 만듭니다.

여러 영역을 입력하려면 "[ ]"를 추가하세요.

img = np.zeros((1080, 1920, 3), np.uint8)
area1 = np.array([[250, 200], [300, 100], [750, 800], [100, 1000]])
area2 = np.array([[1000, 200], [1500, 200], [1500, 400], [1000, 400]])
 
cv2.fillPoly(img, [area1, area2], (255, 255, 255))
 
cv2.imwrite('./2.jpg',img)

반투명 채우기:
때때로 반투명 채우기 효과를 원할 경우 cv2.addWeighted 메소드를 사용할 수 있습니다.

alpha = 0.7
beta = 1-alpha
gamma = 0
img_add = cv2.addWeighted(img1, alpha,img2, beta, gamma)
cv2.imwrite('final ret.jpg',img_add)
cv2.imshow('img_add',img_add)
if cv2.waitKey(500) and 0xff == ord('q'):
    cv2.destroyAllWindows()

Supongo que te gusta

Origin blog.csdn.net/qq_44442727/article/details/127114134
Recomendado
Clasificación