OpenCV를 사용하여 이미지에서 Bitwise_AND 활용

Sahil Bhosale 2023년6월21일
  1. OpenCV의 비트 연산자
  2. OpenCV의 이미지에 Bitwise AND 연산자 사용
OpenCV를 사용하여 이미지에서 Bitwise_AND 활용

비트 연산자는 일반적으로 개별 비트 조작을 사용하는 이진수 또는 비트 패턴에 대해 비트 연산을 수행하는 데 사용됩니다. OpenCV는 이와 동일한 개념을 사용하여 이미지에서 정보를 조작하고 추출합니다.

이 기사에서는 Python OpenCV 라이브러리를 사용하여 Bitwise AND를 활용하는 방법을 구체적으로 살펴봅니다.

OpenCV의 비트 연산자

OpenCV에서 사용되는 기본 비트 연산자는 다음과 같습니다.

  1. 비트 AND
  2. 비트 OR
  3. 비트 NOT
  4. 비트 XOR

비트 연산자는 OpenCV에서 사용되므로 이미지의 일부를 추출하거나 필터링하여 이미지를 묘사하고 직사각형이 아닌 ROI(관심 영역)로 작동할 수 있습니다.

OpenCV의 이미지에 Bitwise AND 연산자 사용

OpenCV에서 Bitwise AND 연산자는 두 개의 서로 다른 이미지를 하나로 결합하거나 이미지의 일부를 다른 이미지로 결합하는 데 사용됩니다. 일반적으로 두 배열/스칼라/이미지의 요소당 비트 논리 조합을 계산합니다.

OpenCV에는 비트 연산을 수행하는 내장 메서드가 있습니다. 따라서 OpenCV의 Bitwise AND 연산자에는 cv.bitwise_and()를 사용합니다.

Python OpenCV bitwise_and() 구문

cv.bitwise_and(src1, src2[, dst[, mask]]) -> dst

매개변수

src1 첫 번째 입력 배열/이미지.
src2 두 번째 입력 배열/이미지.
dst 입력 배열과 크기 및 유형이 동일한 출력 이미지.
mask 선택적 연산 마스크, 변경할 출력 배열의 요소를 지정하는 8비트 단일 채널 배열.

아래에 표시된 예와 함께 이미지에서 Bitwise AND 연산자를 사용하는 방법을 살펴보겠습니다.

먼저 OpenCV를 cv로 가져온 다음 OpenCV의 imread() 메서드를 사용하여 imread()를 사용하여 두 개의 이미지를 읽어야 합니다. 이 메서드는 제공된 이미지를 읽고 이미지 데이터를 배열 형식으로 반환합니다.

이제 img1img2라는 변수 내에 imread()에서 반환된 이 데이터를 저장해야 합니다. Bitwise AND를 적용하기 전에 사용 중인 두 이미지의 모양이 동일한지, 즉 너비, 높이 및 채널 수가 같은지 확인해야 합니다.

이미지 모양이 확실하지 않은 경우 다음과 같이 OpenCV의 shape() 메서드를 사용할 수 있습니다.

코드 조각:

# import opencv
import cv2 as cv

# read the images
img1 = cv.imread("img1.jpg")
img2 = cv.imread("img2.jpg")

print("Shape of img_1 : ", img1.shape)
print("Shape of img_2 : ", img2.shape)

dimension = (img2.shape[1], img2.shape[0])
img1 = cv.resize(img1, dimension, interpolation=cv.INTER_AREA)

print("Shape of img_1 : ", img1.shape)
print("Shape of img_2 : ", img2.shape)

출력:

Shape of img_1 : (4000, 6000, 3)
Shape of img_2 : (3133, 4700, 3)

Shape of img_1 : (3133, 4700, 3)
Shape of img_2 : (3133, 4700, 3)

대부분의 경우 두 이미지의 크기가 동일하지 않으므로 위의 코드와 같이 resize() 메서드를 사용하여 이미지 크기를 조정해야 할 수 있습니다. 이 경우 한 이미지의 크기를 변경하거나 두 이미지의 크기를 모두 변경할 수 있습니다.

이 예제에서는 위와 같이 img2의 크기와 마찬가지로 resize() 메서드를 사용하여 img1의 크기를 변경합니다.

코드 조각:

bitwise_AND = cv.bitwise_and(img1, img2)

cv.imshow("Image-1", img1)
cv.imshow("Image-2", img2)
cv.imshow("Bitwise-AND", bitwise_AND)

cv.waitKey(0)

이제 동일한 크기의 두 이미지가 있으므로 cv.bitwise_and()를 사용하여 주어진 두 이미지에 Bitwise AND 연산을 수행하고 출력을 bitwise-AND라는 변수에 저장할 수 있습니다. 모든 입력, 출력 및 결과 이미지를 표시하기 위해 imshow() 함수를 사용합니다.

입력 이미지가 출력 이미지에 대해 어떻게 표시되는지 명확히 하기 위해 모든 이미지를 표시하고 있습니다. 위 코드의 출력은 다음과 같습니다.

이미지 크기를 변경하고 bitwise_and()를 사용하여 Bitwise AND 연산을 수행

또한 the waitKey() 메서드를 사용하고 값 0을 전달합니다. 사용자가 짧은 기간 동안 또는 아무 키나 누를 때까지 창을 표시할 수 있기 때문입니다. 따라서 인수에 0이 전달되면 아무 키나 누를 때까지 기다립니다.

이것이 동일한 크기의 두 이미지에 대해 Bitwise AND를 수행하는 방법입니다.

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn

관련 문장 - Python OpenCV