목차
openCV 기초, join, 사진 합치기 쌓기, 색깔 감지하기, bitwise_and, mask
1. 가로 및 세로로 쌓기
import cv2
import numpy as np
image = cv2.imread("../Resources/Images/image2.jpg")
#We will stack the images with itself, first i will use the horizontal stack function
imageHor = np.hstack((image, image, image, image))
imageVert = np.vstack((image, image, image))
cv2.imshow("Horizontal Stack", imageHor)
cv2.imshow("Vertical Stack", imageVert)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 사이즈 중요
import cv2
import numpy as np
image = cv2.imread("../Resources/Images/image2.jpg")
imageGray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
print(image.shape, imageGray.shape)
#We will stack the images with itself, first i will use the horizontal stack function
imageHor = np.hstack((image, image, image, imageGray))
imageVert = np.vstack((image, image, imageGray))
cv2.imshow("Horizontal Stack", imageHor)
cv2.imshow("Vertical Stack", imageVert)
cv2.waitKey(0)
cv2.destroyAllWindows()
(159, 318, 3) (159, 318)
사이즈가 다른 경우에는 가능하지 않음.
3. HSV
색을 표현하는 방식 중 하나로 인간의 시각적 인식 방식과 유사하게 색을 표현한다.
Hue 색상, Saturation 채도, Value 명도의 세 가지 요소로 구성된 색 공간이다.
특정 색을 쉽게 필터링하기 좋아 색 추출에 자주 쓰인다. 0~ 179까지 범위
채도는 색의 선명도를 이야기한다. 0이면 회색 255면 원색
명도는 밝기를 이야기한다. 0이면 검정 255면 완전 밝음
import cv2
import numpy as np
#Read an Image
image = cv2.imread("../Resources/Images/carImage.png")
#Convert the image from BGR to HSV color Space
imageHSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#Display the Image
cv2.imshow("Image", image)
cv2.imshow("ImageHSV", imageHSV)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 트랙바 만들기
namedWindow : 윈도우 생성
resizeWindow : 윈도우 사이즈 조정
createTrackbar : 트랙바의 이름, 윈도우창, 초기값, 최대값, 트랙바 값이 변경될 때 실행할 콜백 함수
import cv2
def empty(a):
pass
#trackbars라는 이름을 가진 window 생성 및 사이즈 조정
cv2.namedWindow("Trackbars")
cv2.resizeWindow("Trackbars", 640, 240)
cv2.createTrackbar("Hue Min", "Trackbars", 0,179, empty)
cv2.createTrackbar("Hue Max", "Trackbars", 179, 179, empty)
cv2.createTrackbar("Sat Min", "Trackbars", 0, 255, empty)
cv2.createTrackbar("Sat Max", "Trackbars", 255, 255, empty)
cv2.createTrackbar("Value Min", "Trackbars", 0, 255, empty)
cv2.createTrackbar("Value Max", "Trackbars", 255, 255, empty)
while True:
# Read an Image
image = cv2.imread("../Resources/Images/carImage.png")
# Convert the image from BGR to HSV color Space
imageHSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#Read the Trackbar values so we can apply on our image
h_min = cv2.getTrackbarPos("Hue Min", "Trackbars")
h_max = cv2.getTrackbarPos("Hue Max", "Trackbars")
s_min = cv2.getTrackbarPos("Sat Min", "Trackbars")
s_max = cv2.getTrackbarPos("Sat Max", "Trackbars")
v_min = cv2.getTrackbarPos("Value Min", "Trackbars")
v_max = cv2.getTrackbarPos("Value Max", "Trackbars")
print(h_min, h_max, s_min, s_max, v_min, v_max)
# Display the Image
cv2.imshow("Image", image)
cv2.imshow("ImageHSV", imageHSV)
if cv2.waitKey(100) & 0xFF == ord('1'):
break
# cv2.destroyAllWindows()
# Display the Image
lower = np.array([h_min, s_min, v_min])
upper = np.array([h_max, s_max, v_max])
#Create a Mask 이미지의 특정 색상의 범위를 설정하고, 해당 범위 내의 색상을 마스크로 생성
#범위 안의 색상은 흰색, 나머지는 검정색으로 변환
mask = cv2.inRange(imageHSV, lower, upper)
5. 마스크 만들기(트랙바로 직접 조절)
import cv2
import numpy as np
def empty(a):
pass
#trackbars라는 이름을 가진 window 생성 및 사이즈 조정
cv2.namedWindow("Trackbars")
cv2.resizeWindow("Trackbars", 640, 240)
cv2.createTrackbar("Hue Min", "Trackbars", 0,179, empty)
cv2.createTrackbar("Hue Max", "Trackbars", 179, 179, empty)
cv2.createTrackbar("Sat Min", "Trackbars", 0, 255, empty)
cv2.createTrackbar("Sat Max", "Trackbars", 255, 255, empty)
cv2.createTrackbar("Value Min", "Trackbars", 0, 255, empty)
cv2.createTrackbar("Value Max", "Trackbars", 255, 255, empty)
while True:
# Read an Image
image = cv2.imread("../Resources/Images/carImage.png")
# Convert the image from BGR to HSV color Space
imageHSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#Read the Trackbar values so we can apply on our image
h_min = cv2.getTrackbarPos("Hue Min", "Trackbars")
h_max = cv2.getTrackbarPos("Hue Max", "Trackbars")
s_min = cv2.getTrackbarPos("Sat Min", "Trackbars")
s_max = cv2.getTrackbarPos("Sat Max", "Trackbars")
v_min = cv2.getTrackbarPos("Value Min", "Trackbars")
v_max = cv2.getTrackbarPos("Value Max", "Trackbars")
print(h_min, h_max, s_min, s_max, v_min, v_max)
lower = np.array([h_min, s_min, v_min])
upper = np.array([h_max, s_max, v_max])
#Create a Mask
#이미지의 특정 색상의 범위를 설정하고, 해당 범위 내의 색상을 마스크로 생성
#범위 안의 색상은 흰색, 나머지는 검정색으로 변환
mask = cv2.inRange(imageHSV, lower, upper)
#비트 단위(bitwise) AND 연산을 수행하여 두 이미지 또는 배열을 결합하는 역할
#두 이미지에서 같은 부분만 남고, 다른 부분은 사라짐
imgResult = cv2.bitwise_and(image, image, mask=mask)
# Display the Image
cv2.imshow("Mask Image", mask)
cv2.imshow("Output Image", imgResult)
if cv2.waitKey(1) & 0xFF == ord('1'):
break
# cv2.destroyAllWindows()
6. 마스크로 조절(값 지정)
import cv2
import numpy as np
image = cv2.imread("../Resources/Images/carImage.png")
imageHSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#imageHSV에서 lower~upper 범위에 해당하는 픽셀을 추출하는 마스크 생성
lower = np.array([0,154,117])
upper = np.array([179, 255, 255])
#비트 단위(bitwise) AND 연산을 수행하여 두 이미지 또는 배열을 결합하는 역할
#두 이미지에서 같은 부분만 남고, 다른 부분은 사라짐
mask = cv2.inRange(imageHSV, lower, upper)
imageOutput = cv2.bitwise_and(image, image, mask = mask)
cv2.imshow("Mask Image", mask)
cv2.imshow("Output Image", imageOutput)
cv2.waitKey(0)
cv2.destroyAllWindows()
openCV 기초, join, 사진 합치기 쌓기, 색깔 감지하기, bitwise_and, mask
'머신러닝 > openCV' 카테고리의 다른 글
OpenCV 기초, 스캐너 만들기 (0) | 2025.02.23 |
---|---|
openCV 기초 shape detection, contour, approx, 다각형 찾기, bounding 그리기 (0) | 2025.02.22 |
OpenCV 기초, Wrap perspective, flatten, 사진 펼치기, 스캔 (0) | 2025.02.19 |
openCV 기초, 가우시안 블러, BGR, blur, edge, dialation, erosion, resize, crop, draw, input text, color (1) | 2025.02.19 |
opencv 기초, 이미지 동영상 웹캠 가져오기 (0) | 2025.02.19 |