라벨이 cv2인 게시물 표시

[opencv-python] cv2.rectangle() TypeError: an integer is required (got type tuple)

이미지
cv2.rectangle() TypeError: an integer is required (got type tuple) 'tuple에 integer형이 필요 '하다는 에러입니다. cv2.rectangle() parameter를 보면 start_point와 end_point는 tuple type으로 두 개의 좌표 값을 가져야 한다고 나옵니다. 이때 start와 end_point는 모두 int형의 값을 취해야 합니다. Example 1 import cv2 img = cv2.imread( "image/cat.jpg" ) rect_img = cv2.rectangle(img , ( 0 , 0 ) , ( 100.1 , 100 ) , ( 0 , 0 , 255 ) , - 1 ) cv2.imshow( "rect" , rect_img) cv2.waitKey() # 출력 (에러) # Traceback (most recent call last): #   File "D:/python_projects/mine/blog/retacgle_error.py", line 5, in <module> #    rect_img = cv2.rectangle(img, (0, 0), ( 100.1 , 100), (0, 0, 255), -1) # TypeError: an integer is required (got type tuple) start_point에서 int를 취하지 않아 에러가 발생했습니다. Example 2 import cv2 img = cv2.imread( "image/cat.jpg" ) rect_img = cv2.rectangle(img , ( 0 , 0 ) , ( 100 , 100 ) , ( 0 , 0 , 255 ) , - 1 ) cv2.imshow( "rect" , r

[opencv-python] 이미지 연산하는 법

이미지
Image Addition 이미지 연산으로 OpenCV에 add()와 numpy 연산으로 이미지를 더할 수 있습니다. 두 이미지를 연산하기 위해서는  반드시 "채널"과 "데이터 타입" 이 같아야하며 이미지에 scalar 값을 더할 수 있습니다. OpenCV와 numpy 연산의 차이점은 OpenCV의 cv2.add()는 Saturation 연산 , numpy는 modulo 연산 을 합니다. Saturation 연산 Saturation은 임계값을 정해 그 값을 벗어나는 경우 특정 값으로 계산하는 방식 입니다. 이미지에서는 add 연산으로 픽셀 값이 255(임계값) 이상인 값들은 255로 0(임계값) 이하인 값들은 0으로 표현하는 연산입니다. import numpy as np mat0 = np.uint8([[ 130 , 140 ] , [ 150 , 160 ]]) mat1 = np.uint8([[ 100 , 100 ] , [ 150 , 150 ]]) mat0_add_mat1 = cv2.add(mat0, mat1) print ( "mat0 \n {0} \n " .format(mat0)) print ( "mat1 \n {0} \n " .format(mat1)) print ( "add(mat0, mat1) \n {0}" .format(mat0_add_mat1)) # 출력 # mat0 # [[130 140] #  [150 160]] # mat1 # [[100 100] #  [150 150]] # add(mat0, mat1) # [[230 240] #  [255 255]] mat0 + mat1 과정에서 (150 + 150), (160 + 150) = 300, 310이 각각 나와야하지만 Saturation 연산을 통해 255가 넘은 값들을 모두 255로 변경 하였음

[opencv-python] ROI를 이용한 이미지 합성

이미지
ROI를 이용한 이미지 합성 logo 이미지를 background 이미지 정중앙에 합성하는 예제를 알아보겠습니다. 2개의 이미지 불러오기 import cv2 background = cv2.imread( "image/bit_test.jpg" ) logo = cv2.imread( "image/logo.jpg" ) cv2.imshow( "background" , background) cv2.imshow( "logo" , logo) cv2.waitKey() ROI 영역 설정에 사용할 mask 생성 gray_logo = cv2.cvtColor(logo , cv2.COLOR_BGR2GRAY) _ , mask_inv = cv2.threshold(gray_logo , 10 , 255 , cv2.THRESH_BINARY_INV) cv2.imshow( "mask_inv" , mask_inv) cv2.waitKey() cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY) Notes Color-space를 변환하는 함수. cv2.COLOR_BGR2GRAY를 통해 컬러인 logo 이미지를 gray 이미지로 변환합니다. BGR to GRAY cv2.threshold(gray_logo, 10, 255, cv2.THRESH_BINARY_INV) Notes 임계값(thresh)를 넘으면 임계값을 넘었을 때 적용할 value(maxval)로 값을 변경하는 함수. cv2.THRESH_BINARY_INV를 통해 이미지를 이진화 합니다. (흑(0)과 백(255)으로 분리) # binary image INV(inverse)가 사용되었음으로 분리된 흑과 백을 반대로 변경 합니다 (흑->백, 백->흑) # binary_inverse image cv

[opencv-python] 이미지 크기조절(resize) 하는 법

이미지
이미지 크기 조절(resize) 이미지 크기를 조절하는 예제를 알아보겠습니다. 이미지 불러오기 import cv2 img = cv2.imread( "image/cat.jpg" ) cv2.imshow( "img" , img) cv2.waitKey() cat.jpg 이미지를 불러와 화면에 띄웁니다. 이미지 크기 조절 img = cv2.imread( "image/cat.jpg" ) print ( "img.shape = {0}" .format(img.shape)) resize_img = cv2.resize(img , ( 300 , 300 )) print ( "resize_img.shape = {0}" .format(resize_img.shape)) cv2.imshow( "img" ,  img) cv2.imshow( "resize img" , resize_img) cv2.waitKey() # 출력 # img.shape = (360, 480, 3) # resize_img.shape = (300, 300, 3) 이미지 크기 조절 방법 1 - cv2.resize(img, dsize=(300, 300)) cv2.resize(원본 이미지, 결과 크기 이미지)로 이미지의 크기를 조절할 수 있습니다. 결과 크기 이미지는 Tuple이며 (width, height)의 형식 입니다. 이미지 크기 조절 방법 2 - cv2.resize(img, dsize=(300, 300), interpolation=cv2.INTER_AREA) cv2.resize(원본 이미지, 결과 크기 이미지, 보간법)로 이미지 크기를 조절할 수 있습니다. 보간법은 이미지의 크기를 변경하면 변경된 이미지의 픽셀 사이의 값을 결정해야 하는데, 이때 보간법을 사용합니다.

[opencv-python] 마우스 클릭으로 ROI 영역 추출하기

이미지
ROI 영역을 추출하는 예제를 알아보겠습니다. 이미지 불러오기 import  cv2 # ROI 좌표를 저장할 list points = list () img = cv2.imread( "image/cat.jpg" ) cv2.namedWindow( 'img' ) cv2.setMouseCallback( 'img' , on_mouse) cv2.imshow( "img" , img) cv2.setMouseCallback(windowName, callback, param=None) Notes Mouse Event를 확인하고 Callback을 호출하는 함수입니다. windowName이 img인 윈도우에서 마우스 이벤트가 발생하면 on_mouse 함수가 호출됩니다. Mouse Event 함수 선언 def on_mouse (event , x , y , flags , param ):       if event == cv2.EVENT_LBUTTONDOWN:          points.append([x , y])           print (points) on_moise(event, x, y, flags, param) 마우스 이벤트 발생시 호출될 함수를 정의합니다. cv2.EVENT_LBUTTONDOWN 왼쪽 마우스 버튼을 누르고 있을 때 발생 points.append([x, y]) 왼쪽 마우스 버튼을 누를 때의 좌표를 points에 저장합니다. 이미지 ROI 설정 while True :       if len (points) == 2 :         x = points[ 0 ][ 0 ]         y = points[ 0 ][ 1 ]         ROI = img[y:points[ 1 ][ 1 ] , x:points[ 1 ][ 0 ]]          break  

[opencv-python] 컬러이미지 흑백이미지로 변환

이미지
컬러이미지를 흑백이미지로 바꾸는 예제를 알아보겠습니다. 우선 컬러 고양이 이미지 사진을 불러옵니다. import cv2 cat = cv2.imread( "image/cat.jpg" , cv2.IMREAD_COLOR) cv2.imshow( "cat" , cat) cv2.waitKey() cv2.imread(fileName, flag)  : 이미지 파일을 flag 값에 따라 읽어옵니다. flag는 총 3가지로 명시적으로 써줘도 되고 숫자를 사용해도 됩니다. cv2.IMREAD_COLOR (1) : 이미지 파일을 Color로 읽어들입니다. cv2.IMREAD_GRAY_SCALE (0) : 이미지를 Grayscale로 읽어들입니다. cv2.IMREAD_UNCHAGED (-1) : 이미지 파일을 alpha channel까지 포함하여 읽어들입니다. cv2.imshow(title, image) : 읽어들인 이미지 파일을 윈도우창에 보여줍니다. title(str) : 윈도우 창의 Title cv2.waitKey() : 키보드 입력을 대기하는 함수로 0이면 key 입력까지 무한대기이며 cv2.wailtKey(10) : 특정 시간동안 대기하려면 milisecond 값을 넣어주면 됩니다. (10초 대기) 컬러이미지를 흑백이미지로 변환 시킵니다. gray_cat = cv2.cvtColor(cat , cv2.COLOR_BGR2GRAY) cv2.imshow( "gray_cat" , gray_cat) cv2.waitKey() cv2.cvtColor(src, code) : color-space 변환 cv2.COLOR_BGR2GRAY : BGR -> Grayscale로 변환합니다. cv2.COLOR_BGR2HSV : BGR -> HSV로 변환합니다. 전체코드 import cv2