728x90

opencv 28

[python+opencv] ip 카메라(cctv)로부터 영상 받기

오늘은 python과 opencv를 이용해서 ip 카메라(cctv)로부터 영상 신호를 받는 방법에 대해 공유하고자 합니다. 우선 usb 카메라(흔히 우리가 부르는 웹캠)를 통해 영상 신호를 받을 때는 이런 코드가 사용됩니다. python+opencv를 사용해보신 분에게는 아주 익숙한 한 줄일 것입니다. capture = cv2.VideoCapture(0) 그런데 만약 ip 카메라로부터 신호를 받을 때는 다음과 같은 코드를 사용해야 합니다. 필요한 url은 각자 상황에 따라 다를 것입니다. 사용하시는 ip 카메라의 메뉴얼 등의 문서를 참고하시면 됩니다. 192.168.0.33:554/h264major는 제 상황에 맞는 코드라는 것을 기억해주세요. capture = cv2.VideoCapture('rtsp:..

코딩/python 2022.03.31 (2)

[python] 외장 웹캠을 사용할 때 cv2.VideoCapture(1)로 했는데 안되면?

일반적으로 cv2.VideoCapture(0)은 노트북 내장 웹캠을 작동시키고, cv2.VideoCapture(1)은 노트북에 USB로 따로 연결시켜준 외장 웹캠을 작동시킵니다. 그런데 외장 웹캠을 연결했고 cv2.VideoCapture(1)로 하는데 실행이 안 되고 다음과 같은 에러가 뜰 때가 있습니다. can't open camera by index 이런 경우에는 한번 cv2.VideoCapture(2)를 시도해보세요. 저는 이렇게 해주니 되더라고요. 싱거운 결말이죠?ㅎㅎ

[python] cv2.imread, cv2.imwrite 한글 경로 인식을 못하는 문제 해결 방법

cv2.imread 한글 경로 인식 문제 해결법 opencv 라이브러리의 cv2.imread 함수를 사용할 때 이미지 파일의 경로에 한글이 있는 경우에 제대로 읽어내지 못합니다. 다음 코드를 실행하면 에러가 뜹니다. 1 2 3 4 5 6 7 8 9 10 11 import cv2 path = 'D:/티스토리/티스토리 포스팅/python/cv2.imread 한글 파일 경로 인식 실패 문제 해결 방법' img_name = '교훈.jpg' full_path = path + '/' +img_name img = cv2.imread(full_path, cv2.IMREAD_COLOR) cv2.imshow('이미지', img) cv2.waitKey(0) cv2.destroyAllWindows() Colored by Co..

[python] 웹캠 영상에서 검출된 얼굴들에 모자이크 효과 넣기

오늘은 웹캠 영상에서 검출된 얼굴들에 모자이크 효과를 넣어보도록 하겠습니다. 다음과 같은 절차를 거쳐서 얼굴들에 모자이크 효과를 넣을 것입니다. 1) 우선 cvlib 라이브러리의 얼굴 검출 모델(딥러닝 기반)을 이용해서 영상의 각 프레임 내 얼굴들을 검출합니다. 2) 얼굴 부분을 잘라내서 크기를 축소시킨 다음에 다시 원래 사이즈로 확대시켜서 모자이크 효과를 준 것을 다시 프레임에 붙여넣습니다. 얼굴 부분의 해상도를 확 줄인 다음에 다시 확대시키기 때문에 모자이크 처리된 것처럼 보이게 됩니다. 제가 작성한 python 코드는 다음과 같습니다. 이 코드를 실행하기 위해서는 cvlib과 opencv-python 패키지가 필요하니 설치가 안 되어 있다면 설치해주세요. 1 2 3 4 5 6 7 8 9 10 11 ..

[python] 채워진 사각형 그리는 방법, cv2.rectangle 함수 활용

사각형을 그릴 때는 cv2.rectangle 함수를 사용할 수 있습니다. 이 함수를 사용하기 위해서는 opencv 패키지가 설치되어 있어야 합니다. pip install opencv-python 등의 방법으로 먼저 설치해주세요. 이 함수는 몇 개의 매개변수가 있는데 다음과 같은 의미를 갖습니다. cv2.rectangle(사각형을 넣을 이미지, 사각형 좌측상단 좌표, 사각형 우측하단 좌표, 테두리선 색상, 테두리선 두께) 여기서 마지막 매개변수인 테두리선의 값을 -1로 설정해주면 채워진 사각형이 그려집니다. 그럼 간단한 예제 코드를 하나 보여드리겠습니다. 1 2 3 4 5 6 7 import cv2 im = cv2.imread('test.jpg') cv2.rectangle(im, (330, 100), (5..

[python] 단방향 또는 양방향으로 화살표 있는 선 그리기, cv2.arrowedLine 함수 활용

이미지 내에 화살표가 있는 선을 그리고 싶을 때는 cv2.arrowedLine() 함수를 사용할 수 있습니다. cv2.arrowedLine(선을 넣을 이미지, 선출발좌표, 선종료좌표, 선색깔, 선두께) 참고로 화살표 없는 일반 선을 그릴 때는 cv2.line() 함수를 사용합니다. 그러면 이미지 내에 화살표를 넣어보는 예제를 하나 만들어 보도록 하겠습니다. 코드와 실행 결과는 각각 다음과 같습니다. 1 2 3 4 5 6 7 import cv2 im = cv2.imread('test.jpg') cv2.arrowedLine(im, (100, 200), (300, 350), (255,0,0), 2) cv2.imwrite('result.jpg', im) cs 파란색의 화살표 있는 선이 잘 그려졌죠? 여기서 주의..

[python] 사진에 카툰(cartoon) 효과주기, cv2.stylization 함수

opencv 패키지에는 사진을 카툰처럼, 만화처럼 바꿔주는 함수가 있습니다. 바로 cv2.stylization이란 함수입니다. 우선 이 함수를 이용해서 몇 개의 사진에 카툰 효과를 넣어보겠습니다. 진짜 뭔가 그린 것 같은 이미지가 되었죠? ㅎㅎ 이 방향(cartoonization)을 연구하는 사람도 꽤 많은 것 같습니다. 물론 요즘은 딥러닝 기반의 알고리즘들이 쏟아져 나오고 있고요. 이 연구의 매력은 영화를 한 순간에 만화 영화, 카툰 버전으로 만들 수 있다는 점입니다. 엄청나지 않나요?ㅋㅋ 몇 초만에 하나의 프레임을 카툰화시킬 수 있다는 것이 놀랍습니다. 사람이 한 컷 그리려면 적어도 몇 시간은 걸릴텐데 말이죠. 어쩌면 그림을 그리는 분들에게는 슬픈 소식일 수도 있겠습니다...ㅜ 아무튼 이 놀라운 기능..

[python+opencv] 이미지 회전시키기, cv2.rotate 함수

파이썬에서 이미지를 회전시킬 때는 opencv 패키지의 rotate함수를 사용할 수 있습니다. 사용방법은 다음과 같습니다. cv2.rotate 함수 사용법 rotate 함수의 첫번째 매개변수에는 회전시킬 이미지를, 두번째 매개변수에는 회전 각도를 입력해주면 됩니다. cv2.rotate(이미지, 각도) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import cv2 img = cv2.imread('test.jpg', cv2.IMREAD_COLOR) img90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) # 시계방향으로 90도 회전 img180 = cv2.rotate(img, cv2.ROTATE_180) # 180도 회전 img270 = cv2.rot..

[opencv와 C++로 컴퓨터 비전] 영상 재매핑 처리

▶ 영상 재매핑 처리 오늘은 영상의 화소를 옮겨 영상의 모습을 변경하는 방법에 대해 공부해보자. 화소의 값을 바꾸지 않고 화소의 위치를 새로운 위치에 재매핑 할 것이다. 두 가지를 해볼 것인데 하나는 영상에 물결 효과를 넣는 것이고, 또 다른 하나는 영상을 좌우반전시키는 것이다. 1. 원본 영상 읽기 및 띄우기2. 원본 영상에 물결 효과 넣기 - cv::remap 함수3. 원본 영상을 좌우반전시키기 - cv::remap 함수 코드는 아래와 같다. #include #include #include #include //cv::remap 함수 사용을 위해 필요 void wave(const cv::Mat &image, cv::Mat &result); // 물결 효과 함수void flip(const cv::Mat ..

코딩/C, C++ 2018.03.21

[opencv와 C++로 컴퓨터 비전] 두 개의 영상 가중합하기

▶ 두 개의 영상 가중합 하기 영상끼리 더해주거나 빼주거나 곱해주거나 나누어주는 것이 가능하다. 오늘은 두 영상을 가중합하는 것을 해보도록 하겠다. 화창한 이미지에 비 이미지를 더해서 마치 비가 오는 것처럼 만들 것이다. 1. 두 개의 영상 읽기2. 영상 가중합- cv::addWeighted 함수3. 또 다른 방식으로 영상 가중합4. BGR중에 G, 초록 채널에만 영상 가중합(초록비 내리게 함)- cv::split 함수, cv::merge 함수 코드는 아래와 같다. #include #include #include #include // cv::cvtColor 함수를 사용하기 위해 필요. int main(){/* 2개의 컬러 이미지 가중합 */cv::Mat img1 = cv::imread("marco.jpg..

코딩/C, C++ 2018.03.19