오늘은 opencv 책을 읽고나서
책에 대해서 Chapter별로 정리를 해 볼 생각이다.
이번에는 설치와 기본개념에 대해서 말해보려고한다.
시작하기 앞서 전체적인 소스는
https://github.com/gilbutITbook/006939 여기서 참조해서 구현한 것임을 알린다.
영상정보는 여러가지가 있는데
밝기, 색상, 모양, 텍스처 가 있다.
영상이라고 말하면 사람들은 대부분 유튜브와같이 움직이는 사진 여러장을 생각하는데
뜻풀이를 하면 우리가 생각하는 영상은 동영상이 맞고
영상은 정적인 이미지 하나 사진을 의미한다.
video = 동영상, image = 영상
영상처리를 해보면 한번쯤은 해보셨을법한 흑백 이미지(Gray Scale)를 다뤄봤을 것이다
Gray Scale은 0~255범위(unsigned char형)를 갖는다. (윈도우 BYTE, 리눅스 uint8_t)
우리가 과학시간에 한번쯤은 들어본 RGB는 이 0~255정보가 각각 있어서
R: 0~255
G: 0~255
B: 0~255
이렇게 구성된다.
영상 파일 형식은 각기 다른 압축 방식과 사용 용도에 따라 나뉘는데
BMP: 픽셀 데이터 보존, 파일구조가 간단 대신 용량이 큼
JPG: 트루컬러 영상을 저장하기 위해 사용 손실 압축을 사용 손실압축으로 저장된 영상은 다시 복원할때 픽셀값이 미세하게 달라짐대신 압축을 통해 용량이 크게 감소하는 장점이있어서 디지털 카메라에서 촬영된 사진을 저장하는 용도로 사용
GIF: 256 이하의 색상을 가진 영상만을 저장할 수 있는 포맷 , 무손실 압축을 수행한다. 카메라로 찍은 사진을 GIF 형식으로 저장하면 256색상으로 변환 되기 때문에 화질이 크게 손상됨, GIF는 움직이는 그림인 Animation GIF를 지원하기 때문에 인터넷 웹페이지에서 널리 사용되지만 컴퓨터 비전에서는 잘쓰이지 않는다.
PNG:Portable Network Graphics의 약자이며, 무선실 압축 수행 트루컬러 영상과 그레이 스케일 영상등을 모두 지원한다 , 무손실 압축의 특성상 JPG형식보다 파일용량이 큰 편이지만 픽셀 값이 변경 되지 않는 장점이있다. PNG는 알파 채널을 지원하여 일부분을 투명하게 설정할 수 있다.
대표적으로 4가지를 정리해봤다.
이제 오늘의 이론시간은 여기까지로하고
자! 한번 실습을 해볼까요? (이론만하면 졸리니까..)
오늘은 설치와 환경설정 그리고 영상처리하면 한번쯤은 보셨을 레나 누님을 띄워봅시다~ㅎㅎ
먼저 Open cv 공식 사이트에 들어갑니다~
상단에 있는 여러개 선택지 중 release를 누릅니다.
이렇게 버전 별로 친절하신 개발자들께서 선택할 수 있도록 해놨습니다
이책은 4.0.0 버전을 기반으로 코드를 진행하기 때문에 되도록이면 버전을 맞추어 진행 하도록 합시다.
버전별로 차이점은
2. 버전은 C언어 포인터와 구조체 기반으로 주로 동작한걸로 기억하구요
3. 버전부터는 Mat라는 클래스 개념이 도입됩니다.
4. 버전부터는 크게 달라진 변화점은 잘모르겠네요..ㅎㅎ 아마 딥러닝과 머신러닝 기능을 제공해주는 점이 차이일거 같습니다.
자 위에서 본인이 쓰시는 OS(operating system 윈도우, 리눅스, 맥)에 따라 설치를 합니다.
OS별로 설치방법은 다르지만 대중이 사용하는 윈도우를 기반으로 말씀 드리겠습니다.
이제 설치를 누르면 여러분에 PC에 저장이 됩니다.
다운받은 폴더에 RGB모양을 뜬 이쁜 아이콘을 더블(따브르) 클릭합니다.
그럼 다음과 같이 어디다가 풀래? 라고 나옵니다 그러면 보통 C:\에 놓고 하니까
저또한 C에 설치경로를 두고 Extract버튼을 눌러보겠습니다.
3년된 노트북이 힘을 써가면서 설치하는 모습을 보시고 계십니다...
자그럼 각자 선택할 폴더에서
이폴더가 생성되면 아주 잘된것입니다~
자오늘 끝~
이라고하면 아직 할게 많이 남았죠
여기서부터 빡쥡즁 하셔야합니다~
처음하시는 분들은 어렵거든요 ㅠㅠ
자이제 바탕화면에 있는
이친구 내pc를 우클릭합니다.
그다음으로 속성에 들어갑니다
그럼 시스템 창이 뜨는데 왼쪽에 보시면
여러가지 탭들이 있는데
고오오급 시스템 설정을 눌러줍니다.
그럼 다음과 같은 창을 보시게 되는데
더욱 고급스럽고 럭셔리하게 "고급" 탭을 눌러준다.
그럼 다음과 같이 "환경 변수" 버튼이 보이는데 이것을 클릭해줍니다.
그럼 위와같이 "사용자에 대한 사용자 변수(U)"가 있는데 이걸 눌러준다.
여기서 우리는 변수이름을 OPENCV_DIR 이라하고
변수 값을 본인이 설치한 폴더경로\opencv\build(ex) C:\opencv\build)로 하면 된다 그리고 확인 버튼을 누르면
왼쪽 과 같이 새롭게 추가된 것을 볼것이다.
그리고 변수에 Path라고 되있는 애가 있는데 그걸 따블 클릭 해준다.
그러면 오른쪽 처럼 환경변수 편집기가 나오는데
여기서 새로만들기로
%OPENCV_DIR%\x64\vc15\bin 을 입력하고
확인버튼을 누른다.
(=C:\opencv\build\x65\vc15\bin)
여기까지 잘해 냈다 정말 힘들었지만 거의다왔다 (정말루..)
자이제 비쥬얼 스튜디오를 켜준다.(이책 저자는 2017버전을 사용하여 나또한 2017로 사용했다.)
그리고 새롭게 프로젝트를 만들어준다
"Windows 데스크톱 마법사"로 만들어준다.(빈프로젝트, SDL 검사 체크)
x64로 변경 기존에 x64였으면 그대로 두셔도 됩니다
이제 저희가 만든 솔루션에서 설정을 컴파일과 링커 설정을 해줘야합니다.
왜냐하면 라이브러리를 가져다쓰는데 어디서 가져오는지는 프로젝트도 알아야되니까요~ ㅎㅎ
솔루션 파일(저자는 OpenCV)를 우클릭하고 속성에 들어간다.
다음과 같은 화면이 나올것이다
이제 거의 다왔으니 좀만 참고 따라오면된다.
구성:Debug 플랫폼:x64
"구성속성"->"C/C++"->"일반" 에 들어간다
추가포함 디렉터리 우측에 아래화살표를 클릭하고 편집을 눌러준다
오른쪽 그림에서 폴더버튼같은걸 누른뒤
$(OPENCV_DIR)\include
를 입력하고 확인 버튼을 눌러준다.
그다음으로 "구성속성"->"링커"->"일반"에 들어가준다.
여기서 추가 라이브러리 디렉터리를 누르고 앞에서 한것처럼 오른쪽 화살표를 클릭하여 편집을 눌러준다.
앞과 비슷한 화면이지만
내부에 값을 추가하는것은 조금 다르다.
$(OPENCV_DIR)\x64\vc15\lib
을 입력하고 확인 버튼을 눌러준다.
다음으로는 "구성속성"->"링커"->"입력"에 들어간다.
추가종속성 또한 앞에서 설명한것처럼 편집에 들어간다
여기서는 맨위에 빈칸으로 되어잇을텐데
opencv_world400d.lib을 입력해준뒤
확인 버튼을 눌러준다.
이제 위에서 배운 속성페이지에서 변경한 것을
구성: Release
플랫폼: x64
환경에서
"구성속성"->"C/C++"->"일반"
"구성속성"->"링커"->"일반"
은 동일하게 해주지만
마지막
"구성속성"->"링커"->"입력" 에서는 opencv_world400d.lib에서 d를 뺀
"opencv_world400.lib"를 입력해준다. 혼동주의!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Debug | Release | |
"구성속성"->"C/C++"->"일반" |
$(OPENCV_DIR)\include |
|
"구성속성"->"링커"->"일반" | $(OPENCV_DIR)\x64\vc15\lib | |
"구성속성"->"링커"->"입력" | opencv_world400d.lib | opencv_world400.lib |
표로 정리해놓았으니 꼭 혼동하는 일은 없도록 하자
자이제 그토록 고통스러운 작업은 끝났다 이제 레나 누님보고 쉽시다~
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main(void)
{
cout << "hello openCV" << CV_VERSION << endl;
Mat img;
img = imread("lenna.bmp");
if (img.empty()) {
std::cerr << "Image load failed!" << endl;
return -1;
}
namedWindow("image");
imshow("image", img);
waitKey();
return 0;
}
맨위에 있는 깃헙 주소에 있는 강의 2장 예제를 따라 치고 실행 시켜본다(사진도 깃헙에 있음)
흐흐흐~
다음과 같이 레나 누님과 cmd창에 hello openCV 4.0.0이 뜨면 성공한 것이다
소스 코드를 간단히 설명하자면
#include "opencv2/opencv.hpp" : 환경설정을 통해 라이브러리에 있는 opencv 헤더파일을 include
cout << "hello openCV" << CV_VERSION << endl; : CV_VERSION 기존에 정의된 버전 출력
Mat img;
img = imread("lenna.bmp");
레나 누님 사진을 이제 Mat라는 클래스로 선언된 객체 img에 넣는다.
if (img.empty()) {
std::cerr << "Image load failed!" << endl;
return -1;
}
이미지 불러오기가 실패했는지 멤버함수인 empty() 를 통해 확인하고 불러오기가 실패한경우 에러메세지를 출력한다.
namedWindow("image");
imshow("image", img);
image로 된 윈도우 창을 생성한다
image라는 창에 img 객체를 넣는다.
waitKey();
키입력이 있을 때까지 기다린다.
이상으로 오늘 내용은 마무리 짓겠습니다
힘드셨을텐데 끝까지 함께해주셔서 감사합니다.
시작이 반인데 벌써 반왔네요 ㅎㅎ