본문 바로가기

카테고리 없음

opencv - 9일차

Bitwise Operations (bitwise AND, OR, NOT and XOR) 

 

import cv2
import numpy as np

img1 = np.zeros((250,500,3), np.uint8)
img1 = cv2.rectangle(img1, (200,0), (300,100), (255,255,255), -1)
img2 = cv2.imread('image_1.png')

bitAnd = cv2.bitwise_and(img2, img1)
bitOr = cv2.bitwise_or(img2, img1)
bitXor = cv2.bitwise_xor(img1, img2)
bitNot1 = cv2.bitwise_not(img1)
bitNot2 = cv2.bitwise_not(img2)

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)

cv2.imshow('bitAnd', bitAnd)
cv2.imshow('bitOr', bitOr)
cv2.imshow('bitXor', bitXor)
cv2.imshow('bitNot1', bitNot1)
cv2.imshow('bitNot2', bitNot2)

 

 

cv2.bitwise 함수는 이후에 공부할 mask 연산에 매우 유용하다

 

우리가 알고 있는 논리적 연산자의 개념인 것이다.

 

cv2.bitwise_and(img1, img2)

cv2.bitwise_or(img1, img2)

cv2.bitwise_not(img1)

cv2.bitwise_xor(img1, img2)  를 파라미터로 받는다. 

 

 

 

 

How to Bind Trackbar To OpenCV Windows

 

 

이제는 opencv 윈도우 창에 trackbar 을 넣는 방법을 공부하겠다

 

 

 

import numpy as np
import cv2 as cv


def nothing(x):
    print(x)  # 트랙바가 움직임에 따라 그 값을 프린트 할 수 있게끔

img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')  # namedWindow 라고 처음 사용하는 메소드인데 말 그대로 image 라는 이름의 창을 생성해내는 것이다.


cv.createTrackbar('B', 'image', 0, 255, nothing)
cv.createTrackbar('G', 'image', 0, 255, nothing)
cv.createTrackbar('R', 'image', 0, 255, nothing)

# createTrackbar 메소드의 파라미터는

첫번째 바의 이름

두번째 바가 나타날 윈도우의 이름, 즉 우리가 namedWindow로 만들어낸 윈도우

세번째 바가 움직임에 따라 변화하는데 그 첫번째 시작점

네번째 바가 움직임에 따라 변화하는데 그 마지막 위치

다섯번째 바가 움직일 때 마다 호출하는 함수명, 위에서 정의


while (1):
    cv.imshow('image', img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break

    b = cv.getTrackbarPos('B', 'image')
    g = cv.getTrackbarPos('G', 'image')
    r = cv.getTrackbarPos('R', 'image')
 

# getTrackbarPos 는 track bar 의 값을 가져와서

 img[:] = [b,g,r]
# 이미지에 b g r 채널 값을 섞은 색상을 표현하게끔
    
cv.destroyAllWindows()

 

여기에 스위치 기능을 추가해보면

 

import numpy as np
import cv2 as cv


def nothing(x):
    print(x)

img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')


cv.createTrackbar('B', 'image', 0, 255, nothing)
cv.createTrackbar('G', 'image', 0, 255, nothing)
cv.createTrackbar('R', 'image', 0, 255, nothing)

switch = '0 : OFF \n 1: ON'
cv.createTrackbar(switch, 'image', 0, 1, nothing)

while (1):
    cv.imshow('image', img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break

    b = cv.getTrackbarPos('B', 'image')
    g = cv.getTrackbarPos('G', 'image')
    r = cv.getTrackbarPos('R', 'image')
    s = cv.getTrackbarPos('S', 'image')

    if s == 0:
        img[:] = 0  # 아무 변화 없게끔
    else:
        img[:] = [b,g,r] # 스위치 값이 1일때만 변화가 있게끔
  
cv.destroyAllWindows()

 

참고) 유튜브 opencv python tutorial for beginners 11, 12