OpenCV-기초(1주차)

Oak_Cassia·2022년 7월 15일
0

이미지 기초

이미지를 읽기

  • cv2.imread()

이미지 변환

  • cv2.cvtColor()

이미지 출력

  • cv2.imshow()

이미지 저장

  • cv2.imwrite()

이미지 크기조정

  • cv2.resize()

이미지 뒤집기

  • cv2.flip()

이미지 창 종료

  • cv2.waitKey()
     cv2.destroyAllWindows() 

도형 그리기

사각형

  • cv2.rectangle

  • cv2.circle()

  • cv2.line()

사용자 설정

  • cv2.polylines()
  • np.array로 배열을 생성 한 후 인자를 넘겨야 함

사용자 설정 & 내부 채우기

  • vertices = np.array([[10,10],[10,100],[100,10]],dtype=np.int32)
     r_vertices = vertices.reshape((-1,1,2))
     cv2.fillPoly(img,[r_vertices],color=(0,0,255))

글자 그리기

  • cv2.putText()

이미지 창에 마우스로 그리고 싶을 때

def draw_someting(event,x,y,flags,param):
	if event == cv2.EVENT_LBUTTONDOWN:
    	cv2.rectangle(...)
cv2.namedWindow(winname='drawing') #참조할 수 있게 창 이름 설정
cv2.setMouseCallback('drawing',draw_circle) #콜백함수 바인딩
while True:
	#이미지 갱신
    if cv2.waitKey(1) & 0xFF == ord('q'):
    	break
cv2.destroyAllWindows()

카메라

cam=cv2.VideoCapture(0)
ret, frame = cam.read()
cv2.imshow('frame')
cam.release()

동영상 파일

video1 = cv2.VideoCapture('경로')
if video1.isOpened()== False: 
    print("잘못된 경로")
#fps 조절을 위해 프레임 마다 time.sleep을 해주면 보기 좋다.
while cap.isOpened():

블렌딩

cv2.addWeighted() #두 이미지의 크기가 같아야 함

ROI에 쓸 마스크 만들기

  • mask 값이 0인 부분은 연산을 하지 않는다. (검은색 부분)
#크기를 영역과 맞춘 이미지 사용

# 마스크 만들기
img2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
mask1= cv2.bitwise_not(img2)

#마스크를 사용해 최종 붙여넣을 이미지
paste_img = cv2.bitwise_or(img,img,mask=mask1)

#이미지 붙인 결과
result_img= cv2.bitwise_or(roi,paste_img)

# 이후 슬라이싱으로 원래 이미지에 입력

Thresholding

cv2.threshold(img,127,255,cv2.THRESH_BINARY)

  • 반환값이 2개

cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,8)

블러링, 스무딩

np.power()

  • 감마값 조절 (밝기 조정) 작아지면 밝고 커지면 어두움

cv2.filter2D(img,-1,kernel) #-1은 출력 영상의 데이터타입(ddepth)
cv2.blur(img,ksize=(5,5))
cv2.GaussianBlur(img,(5,5),10)
cv2.medianBlur(img,5)
cv2.bilateralFilter(img,9,75,75)#에지는 보존

모폴로지

침식

  • cv2.erode(img,kernel,iterations = 1)

팽창

  • cv2.dilate(img, kernel, iterations=1)

오프닝

  • cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
  • 침식 후 팽창

클로징

  • cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
  • 팽창 후 침식

그레이디언트

소벨

  • x: cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
  • y: cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
    `
    cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

히스토그램

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

color =('b','g','r')
for i,col in enumerate(color):
    histr = cv2.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,256])
plt.title('')
plt.show()

평활화

  • cv2.equalizeHist(img)
    컬러는 hsv로 변환후 [:,:,2] 부분 교체
profile
rust로 뭐할까

0개의 댓글