Python에서 OpenCV의 GUI 기능

Manav Narula 2023년10월10일
  1. Python에서 OpenCV를 사용하여 이미지 읽기 및 쓰기
  2. Python에서 OpenCV를 사용하여 이미지에 그리기
  3. Python에서 OpenCV를 사용하는 트랙바가 있는 색상 팔레트
  4. 결론
Python에서 OpenCV의 GUI 기능

GUI는 그래픽 사용자 인터페이스(Graphical User Interface)의 약자로 사용자가 키보드 및 마우스와 같은 하드웨어 장치를 사용하여 프로그램과 상호 작용할 수 있도록 합니다. GUI는 비교적 사용하기 쉬운 시각적으로 매력적인 인터페이스를 제공합니다.

opencv 라이브러리는 이미지 처리에 다양한 기술을 적용할 수 있는 다양한 기능과 개체를 구현합니다. 이 라이브러리를 사용하여 이미지를 매우 효율적으로 읽고 처리할 수 있습니다.

이 튜토리얼은 Python의 opencv 라이브러리를 사용하여 다양한 GUI 기술을 보여줍니다.

Python에서 OpenCV를 사용하여 이미지 읽기 및 쓰기

GUI 기술의 가장 기본적인 것은 이미지를 읽고 표시하는 것과 관련이 있습니다. opencv 라이브러리는 imshow() 함수를 사용하여 이미지를 표시하기 위한 창을 만듭니다.

imread() 함수를 사용하여 이미지를 미리 읽을 수 있으며 imwrite() 메서드를 사용하여 지정된 경로에 저장할 수도 있습니다.

파이썬 인터프리터는 프로그램이 실행되자마자 생성된 창을 닫으려고 하며, waitKey() 함수를 사용하여 이를 방지할 수 있습니다. 이 기능은 사용자가 일부 키를 누른 다음 프로그램 실행을 재개할 때까지 기다립니다.

destroyAllWindows() 함수를 사용하여 사용자 요구 사항에 따라 창을 닫을 수 있습니다. 실제 사례를 살펴보겠습니다.

코드 예:

import cv2

img = cv2.imread("obj.png")
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

출력:

True

파이썬에서 opencv gui를 사용하여 이미지 읽기 및 쓰기

코드는 imread() 함수를 사용하여 이미지를 읽고 imshow() 함수를 사용하여 이미지를 표시합니다. 그런 다음 실행을 재개하기 전에 사용자가 일부 키를 누를 때까지 기다립니다.

키를 누르면 생성된 창이 닫힙니다. 그런 다음 imwrite() 함수는 지정된 이미지를 지정된 경로에 저장합니다.

함수 내에서 파일 이름과 형식도 지정합니다. 이 함수는 파일이 성공적으로 작성되었음을 지정하는 True를 반환합니다.

Python에서 OpenCV를 사용하여 이미지에 그리기

opencv 라이브러리는 이미지에 그리는 기능도 제공합니다. line(), rectangle(), circle() 등과 같은 함수를 사용하여 이미지에 다양한 모양을 그릴 수 있습니다.

우리는 이전에 읽은 이미지에 이러한 모양을 그릴 수 있습니다.

코드 예:

import cv2

img = cv2.imread("obj.png")

cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv2.rectangle(img, (400, 0), (510, 128), (255, 255, 0), 3)
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

출력:

True

Python에서 OpenCV를 사용하여 이미지에 그리기

위의 예에서는 입력 이미지에 선과 사각형을 추가한 다음 특정 위치에 저장했습니다.

line() 함수는 이미지에 라인을 추가합니다. 두께 및 색상 코드와 함께 선의 시작 및 끝 좌표를 지정합니다.

rectangle() 함수는 직사각형을 만듭니다. 이 기능은 색상 코드 및 두께와 함께 오른쪽 하단 및 왼쪽 상단 좌표를 지정합니다.

이미지를 그린 후 imwrite() 함수를 사용하여 장치로 내보냅니다.

마우스를 페인트 브러시로 사용하고 주어진 이미지에서 원하는 곳에 모양이나 선을 추가할 수도 있습니다. 앞서 논의한 바와 같이 opencv 라이브러리에는 waitKey() 함수와 같이 사용자 입력을 읽고 감지할 수 있는 함수가 있습니다.

이 라이브러리는 왼쪽 버튼 마우스 클릭, 오른쪽 버튼 마우스 클릭 등과 같은 다양한 이벤트를 저장합니다. 사용자가 일부 이벤트를 수행할 때까지 기다린 다음 이벤트를 기반으로 함수를 호출할 수 있습니다.

먼저 namedWindow() 메서드를 사용하여 창을 만들고 이 창에 제목을 할당해야 합니다. setMouseCallback()은 특정 창에서 마우스 이벤트를 처리합니다.

함수 내에서 창 제목을 지정할 수 있습니다. 또한 실행해야 하는 기능을 지정해야 합니다.

코드 예:

import cv2


def add_circle(e, x, y, flags, param):
    if e == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img, (x, y), 25, (0, 0, 255), -1)


img = cv2.imread("obj.png")
cv2.namedWindow("Draw")
cv2.setMouseCallback("Draw", add_circle)

while True:
    cv2.imshow("Draw", img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()

출력:

opencv python을 사용하여 이미지에 모양(원) 그리기

위 예제의 코드를 이해합시다. 먼저 이미지를 읽고 namedWindow() 함수를 사용하여 창을 만듭니다.

이벤트, 좌표, 플래그 및 기타 매개변수를 허용하는 add_circle() 함수를 만듭니다. 마우스 왼쪽 버튼을 더블 클릭하여 이벤트가 동일한지 확인합니다(cv2.EVENT_LBUTTONDBLCLK).

창에서 마우스를 두 번 클릭하면 조건이 True이고 마우스 클릭 위치에 원을 생성하는 circle() 함수에 좌표를 전달합니다. 이것을 반복적으로 실행하는 루프를 만듭니다.

루프에서 벗어나려면 Escape 키를 눌러야 합니다. waitKey() 함수는 눌린 키를 감지합니다.

Python에서 OpenCV를 사용하는 트랙바가 있는 색상 팔레트

Python에서 opencv를 사용하여 더 복잡한 GUI 기술로 넘어갑시다. 이것은 검은 화면을 사용하여 더 잘 이해될 것입니다.

이를 위해 3차원의 numpy 배열을 만들고 이 배열은 0으로 채워지고 검은색 화면으로 사용됩니다. 그런 다음 이전 예제에서 했던 것처럼 namedWindow() 메서드를 사용하여 이 이미지에 대한 창을 만듭니다.

이제 트랙바를 만들어야 합니다. 트랙바를 사용하여 RGB 값을 변경하여 이 검은색 화면의 색상 팔레트를 제어합니다.

트랙바를 생성하기 위해 createTrackbar() 함수를 사용합니다. 이 메서드는 트랙바를 생성하고, 제공된 창에 첨부하고, 함수 내에서 트랙바의 이미지 객체와 범위를 지정합니다.

이 경우 범위는 0에서 255까지입니다. 또한 슬라이더의 위치가 변경될 때마다 호출되어야 하는 함수가 포함된 OnChange 매개변수를 사용합니다.

위치가 변경될 때 어떤 작업도 수행하는 함수가 필요하지 않습니다. 따라서 작업을 수행하지 않고 pass 문만 포함하는 함수를 만들 것입니다.

특정 키를 누를 때까지 실행되는 루프를 생성합니다. 이 루프에서 getTrackbarPos() 위치를 사용하여 슬라이더의 현재 위치를 가져오고 추적기 위치를 기반으로 이 이미지의 RBG 값을 설정합니다.

코드 예:

import cv2
import numpy as np


def ignore(x):
    pass


img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow("rgb_palette")

cv2.createTrackbar("R", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("G", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("B", "rgb_palette", 0, 255, ignore)

while True:
    cv2.imshow("rgb_palette", img)
    c = cv2.waitKey(1) & 0xFF
    if c == 27:
        break

    R = cv2.getTrackbarPos("R", "rgb_palette")
    G = cv2.getTrackbarPos("G", "rgb_palette")
    B = cv2.getTrackbarPos("B", "rgb_palette")

    img[:] = [B, G, R]

cv2.destroyAllWindows()

Python에서 OpenCV를 사용하는 트랙바가 있는 색상 팔레트

위의 예에서는 Python에서 opencv를 사용하여 RGB 색상 팔레트를 만듭니다. Red, Green 및 Blue 값에 대해 세 개의 트랙바를 만듭니다.

슬라이더에서 값을 변경하고 이미지(검은 화면)에 반영됩니다. 루프에서 벗어나기 위해 waitKey() 함수를 사용하여 Escape> 키를 눌러 누른 키를 감지할 수 있습니다.

결론

이 튜토리얼은 파이썬의 opencv 라이브러리와 관련된 다양한 GUI 기술과 기능을 보여주었습니다. 우리는 이러한 기술을 자세히 시연했습니다.

opencv 라이브러리를 사용하여 이미지를 읽고 쓰는 것은 새로 생성된 창에 이미지가 표시되기 때문에 가장 간단한 GUI 기능이라고 할 수 있습니다. 이 이미지도 내보내고 장치에 저장할 수 있습니다.

그런 다음 opencv를 사용하여 이미지에 모양과 선을 그리는 방법에 대해 논의했습니다. 우리는 이러한 모양을 그리는 데 사용할 수 있는 기능에 대해 논의하고 여기에 사용자 상호 작용을 추가하고 마우스 클릭을 사용하여 모양을 그리는 더 많은 GUI 기능을 추가했습니다.

마지막 GUI 기능에서는 트랙바의 사용을 보여줍니다. 사용자가 변경할 수 있는 슬라이더입니다.

RGB 색상 팔레트 트랙바를 만듭니다. 값이 변경되고 화면에서 변경 사항을 관찰합니다.

작가: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

관련 문장 - Python OpenCV