블로그 이미지
devtang
Instagram : @taebr0 devtaehyeong@gmail.com

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2020. 7. 29. 16:57 OpenCV

 

오늘은 OpenCV를 이용하여 비디오를 읽어오는 예제를 진행해보겠습니다.

 

 

import cv2

def readVideo():
    try:
        cap = cv2.VideoCapture('1.mp4')
    except:
        print('ERROR')
        return

    while True:
        ret, frame = cap.read()

        if not ret:
            print('Error')
        

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        #cv2.imshow('frame',frame)
        cv2.imshow('frame',gray)

        k = cv2.waitKey(1) & 0xFF
        if k == 27:
            break
    cap.release()
    cv2.destroyAllWindows()

readVideo()

 

 

우선 전체 코드입니다.

readVideo()라는 함수를 생성하여 진행하였습니다.

 

cv2.VideoCapture() : 비디오를 읽어오기위한 함수입니다. 인자에 동영상을 지정하면 동영상을 읽어오고

0 이나 1을 넣으면 웹캠도 실시간으로 읽어올 수 있습니다. 일반적으로 웹캠은 0이면 연결이됩니다.

이번 예제는 영상을 Grayscale로 변환하여 출력해보겠습니다.

BGR->Grayscale로 변환하기 위해서는 cv2.COLOR_BGR2GRAY 를 사용합니다.

BGR->HSV로 변환하기 위해서는 cv2.COLOR_BGR2HSV 를 사용합니다.

 

 

                       

 

 

 

 

'OpenCV' 카테고리의 다른 글

[Python] OpenCV 이미지 출력하기  (0) 2020.07.29
[Windows] OpenCV를 이용한 이미지 축소 , 회전  (0) 2020.02.26
posted by devtang
2020. 7. 29. 16:25 OpenCV

오늘은 OpenCV를 이용하여 이미지를 출력하는 예제에 대해 알아보도록 하겠습니다.

 

 

예제 코드 입니다.

우선 OpenCV를 import 해주시고 예제 사진으로는 강아지 사진을 사용했습니다.

import cv2

image = 'doge.jpg'

img_color = cv2.imread(image, cv2.IMREAD_COLOR)
img_gray = cv2.imread(image,cv2.IMREAD_GRAYSCALE)
img_alpha = cv2.imread(image,cv2.IMREAD_UNCHANGED)

cv2.imread 는 opencv에서 이미지를 read하기 위한 함수입니다.

 

여기서 이미지를 읽어올때 플래그중 세가지만 예제로 돌려보았는데

IMREAD_COLOR : 이미지 원본 그대로를 컬러로 출력합니다.

IMREAD_GRAYSCALE : 이미지를 흑백 사진으로 출력합니다.

IMREAD_UNCHANGED : 이미지를 Alpha-channel 을 포함하여 출력합니다. 이것은

우리가 아는 RGB 채널에 Alpha 채널을 추가한것인데, Alpha 는 이미지의 투명도(Transparent)를 나타낸 것인데, 

RGB 처럼 색을 표현하는 값이 아니라 컴퓨터에서 렌더링할 때 쓰이는 보조적인 값입니다.

 

cv2.imshow('frame',img_color)
cv2.imshow('frame2',img_gray)
cv2.imshow('frame3',img_alpha)
cv2.waitKey(0)
cv2.destroyAllWindows()

이제 opencv의 imshow 함수를 이용하여 이미지를 화면에 띄웁니다.

 

cv2.waitKey() : 지정된 시간동안 키보드 입력을 기다리는 함수로써, 기본단위는 1/1000초 = ms 입니다.

예를들어서 cv2.waitKey(1)를 입력하였으면 1ms 동안 대기한다는 뜻이고, 0을 넣었으므로 키보드 입력이 발생하기 전까지 기다리는 뜻입니다.

cv2.destroyAllWindows() : 생성했던 윈도우 창을 모두 지웁니다. 

 

강아지가 정상적으로 로드되는데 성공했습니다.

 

'OpenCV' 카테고리의 다른 글

[Python] OpenCV 비디오 출력하기  (0) 2020.07.29
[Windows] OpenCV를 이용한 이미지 축소 , 회전  (0) 2020.02.26
posted by devtang
2020. 2. 26. 15:38 OpenCV

OpenCV를 이용하여 비주얼 스튜디오 2015 에서 지정된 이미지를 축소 하고 회전시킬 수 있습니다.

 

 

먼저 코드를 실행시킨 모습입니다.

원본 사진의 크기와 축소시킨 사진의 크기를 비교했습니다.

원본 사진의 해상도는 1280 X 1920이며 1/4 크기, 320 X 480로 축소시켰습니다.

	Mat image; // 빈 영상 생성
	image = imread("woman.JPG", IMREAD_COLOR); //이미지 읽기

	if (image.empty()) //이미지를 제대로 읽을 수 없으면 에러 메시지 출력
	{
		printf("Loading Error!");
		return 0;
	}

	/*콘솔창에 띄워주기*/
	printf("Original image is %d x %d\n", image.rows, image.cols);
	namedWindow("Original image"); // 원본 이미지를 전시할 창 만들기 
	imshow("Original image", image); // 원본 이미지 보여주기



	/* 축소 이미지띄우기 */
	Mat resized_image; //축소된 이미지 저장
	resize(image, resized_image, Size(), 0.25, 0.25, INTER_AREA);  //원본 이미지 크기 조정하기. 가로 세로 모두 1/4로 축소. 
	printf("Resized image is %d x %d\n", resized_image.rows, resized_image.cols); // 축소된 이미지 사이즈 출력
	namedWindow("Resized image");
	imshow("Resized image", resized_image); // 축소된 이미지 보여주기

이미지를 imread 함수로 불러온 후 resize 함수를 이용하여 0.25(1/4)로 축소하도록 선언했습니다.

상세 기능은 주석으로 달았습니다.

 

이번에 쓴 기능은 원본사진의 크기만큼 빈 이미지파일을 생성시킨후에 축소된 사진을 복사하여 넣었습니다.

 

/* 축소 이미지->원본사이즈에 대입 */
	Mat cover_image(image.rows, image.cols, CV_8UC3); // 원본사이즈만큼의 빈 이미지 생성
	resized_image.copyTo(cover_image(Rect(100, 100, resized_image.cols, resized_image.rows))); //축소한 이미지를 원본사이즈크기에 결합
	imshow("covered_image", cover_image);

cover_image라 이름을 짓고, copyTo를 이용하여 복사하여 넣습니다.

 

마지막으로 사진을 원하는 각도만큼 회전시킬 수 있습니다.

 

/*회전 이미지 띄우기 */
	Mat rotation; // 회전할 이미지
	Point2f pt(resized_image.cols / 2., resized_image.rows / 2.); //Point2f 로 회전시킬 이미지의 중심 설정 (정중앙)
	Mat r = getRotationMatrix2D(pt, 45, 0.7); // 사진 회전시키기 (사진 중앙값, 회전값, 사진 비율) 
	warpAffine(resized_image, rotation, r, Size(resized_image.cols, resized_image.rows)); //설정해준 값을 회전시켜줌
	imshow("rotate_image", rotation);

Point2f로 이미지를 회전시킬 때 중심을 설정해줍니다.

축소한 사진의 가로,세로에 2로 나누면 정중앙을 기준으로 회전합니다.

getRotationMatrix2D()함수를 이용해 각도, 사진의 크기 비율을 조절하여 회전시킬 준비를합니다.

warpAffine()함수는 설정해준 값을 기준으로 회전 시켜줍니다.

 

아래는 전체 소스입니다.

#include <opencv2/opencv.hpp> 
#include <iostream>

using namespace cv;

int main()

{

	Mat image; // 빈 영상 생성
	image = imread("woman.JPG", IMREAD_COLOR); //이미지 읽기

	if (image.empty()) //이미지를 제대로 읽을 수 없으면 에러 메시지 출력
	{
		printf("Loading Error!");
		return 0;
	}

	/*콘솔창에 띄워주기*/
	printf("Original image is %d x %d\n", image.rows, image.cols);
	namedWindow("Original image"); // 원본 이미지를 전시할 창 만들기 
	imshow("Original image", image); // 원본 이미지 보여주기



	/* 축소 이미지띄우기 */
	Mat resized_image; //축소된 이미지 저장
	resize(image, resized_image, Size(), 0.25, 0.25, INTER_AREA);  //원본 이미지 크기 조정하기. 가로 세로 모두 1/4로 축소. 
	printf("Resized image is %d x %d\n", resized_image.rows, resized_image.cols); // 축소된 이미지 사이즈 출력
	namedWindow("Resized image");
	imshow("Resized image", resized_image); // 축소된 이미지 보여주기

	/* 축소 이미지->원본사이즈에 대입 */
	Mat cover_image(image.rows, image.cols, CV_8UC3); // 원본사이즈만큼의 빈 이미지 생성
	resized_image.copyTo(cover_image(Rect(100, 100, resized_image.cols, resized_image.rows))); //축소한 이미지를 원본사이즈크기에 결합
	imshow("covered_image", cover_image);

	/*회전 이미지 띄우기 */
	Mat rotation; // 회전할 이미지
	Point2f pt(resized_image.cols / 2., resized_image.rows / 2.); //Point2f 로 회전시킬 이미지의 중심 설정 (정중앙)
	Mat r = getRotationMatrix2D(pt, 45, 0.7); // 사진 회전시키기 (사진 중앙값, 회전값, 사진 비율) 
	warpAffine(resized_image, rotation, r, Size(resized_image.cols, resized_image.rows)); //설정해준 값을 회전시켜줌
	imshow("rotate_image", rotation);

	waitKey(0);

	return 0;

}

감사합니다.

'OpenCV' 카테고리의 다른 글

[Python] OpenCV 비디오 출력하기  (0) 2020.07.29
[Python] OpenCV 이미지 출력하기  (0) 2020.07.29
posted by devtang
prev 1 next