|
* Windows에서 OpenCV 설치 방법 (다운로드 https://opencv.org/releases/)
* Ubuntu에서 OpenCV 설치방법 (맨 아래)
버전 | Visual Studio 버전 다운로드 | 속성설정 방법 |
OpenCV 4.10.0 | VS 2022 (64비트) - VC16 opencv-4.10.0-windows.exe 폴더 c:\opencv4100 | 구성관리자 : 64비트를 선택한다. 포함 디렉터리: C:\opencv4100\build\include 라이브러리 디렉터리: C:\opencv4100\build\x64\vc16\lib 링커->입력->추가종속성: opencv_world4100d.lib 디버깅->환경: PATH=%PATH%;C:\opencv4100\build\x64\vc16\bin |
OpenCV 4.9.0 | VS 2022 (64비트) - VC16 opencv-4.9.0-windows.exe | 구성관리자 : 64비트를 선택한다. 포함 디렉터리: C:\opencv490\build\include 라이브러리 디렉터리: C:\opencv490\build\x64\vc16\lib 링커->입력->추가종속성: opencv_world490d.lib 디버깅->환경: PATH=%PATH%;C:\opencv490\build\x64\vc16\bin |
OpenCV 4.8.0 | VS 2022 (64비트) - VC16 opencv-4.8.0-windows.exe | 구성관리자 : 64비트를 선택한다. 포함 디렉터리: C:\opencv480\build\include 라이브러리 디렉터리: C:\opencv480\build\x64\vc16\lib 링커->입력->추가종속성: opencv_world480d.lib 디버깅->환경: PATH=%PATH%;C:\opencv480\build\x64\vc16\bin |
OpenCV 4.5.3 | VS 2019 (64비트) - VC15 https://sourceforge.net/projects/opencvlibrary/files/4.5.3/opencv-4.5.3-vc14_vc15.exe/download | 구성관리자 : 64비트를 선택한다. 포함 디렉터리: C:\opencv453\build\include 라이브러리 디렉터리: C:\opencv453\build\x64\vc15\lib 링커->입력->추가종속성: opencv_world453d.lib 디버깅->환경: PATH=%PATH%;C:\opencv453\build\x64\vc15\bin |
OpenCV 3.4.14 | VS 2015 (64비트) - VC14 https://sourceforge.net/projects/opencvlibrary/files/3.4.14/opencv-3.4.14-vc14_vc15.exe/download | 구성관리자 : 64비트를 선택한다. 추가포함 : C:\opencv320\build\include 라이브러리: C:\opencv320\build\x64\vc14\lib 링커->추가종속성: opencv_world320d.lib 환경변수->PATH: C:\opencv320\build\x64\vc14\bin |
OpenCV 3.1.0 | VS 2013 (32/64비트) - VC12 https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.1.0/opencv-3.1.0.exe/download | 구성관리자 : x86를 선택한다. 추가포함 : C:\opencv310\build\include 라이브러리: C:\opencv310\build\x86\vc12\lib 링커->추가종속성: opencv_world310d.lib 환경변수->PATH: C:\opencv310\build\x86\vc12\bin |
OpenCV 2.4.13 | VS 2012 (32비트) - VC11 VS 2013(32/64비트) - VC12 https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.13/opencv-2.4.13.exe/download | 추가포함 : C:\opencv2413\build\include 라이브러리: C:\opencv2413\build\x86\vc11\lib PATH 설정: C:\opencv2413\build\x86\vc11\bin 링커->추가종속성: 다수의 라이브러리 추가 *.lib opencv_core2413d.lib; opencv_highgui2413d.lib; opencv_imgproc2413d.lib; opencv_video2413d.lib; opencv_calib3d2413d.lib; opencv_contrib2413d.lib; opencv_features2d2413d.lib; opencv_flann2413d.lib; opencv_gpu2413d.lib; opencv_legacy2413d.lib; opencv_ml2413d.lib; opencv_nonfree2413d.lib; opencv_objdetect2413d.lib; opencv_ocl2413d.lib; opencv_photo2413d.lib; opencv_stitching2413d.lib; opencv_superres2413d.lib; opencv_ts2413d.lib; opencv_videostab2413d.lib; |
OpenCV 1.0 | VS 6.0 | C 언어 기반 API highgui 모듈에서 8비트 png, jpeg2000 지원 |
* 환경변수를 수정(후 재부팅 필요) 하지 않고 [디버깅->환경] 설정으로 OpenCV를 실행할 수 있다.
------------------------------------
Visual Studio에서 OpenCV 설정
------------------------------------
1) 다음과 같이 C:\에 설치를 한다.
- 기존 c:/opencv 폴더를 버전별로 c:/opencv4100 로 변경한다.
- 위 환경 설정에 따라 추가/수정한다.
2) 빈 프로젝트 실행
-> 소스 추가 main.cpp (영어로 작성할것)
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image; image = imread( "C:/opencv4100/sources/samples/data/HappyFish.jpg" ); imshow( "Test", image ); waitKey(); } |
3) 속성->디버깅->환경 (DLL파일 있는 폴더를 연결하여 환경변수 설정없이 임시로 동작 가능하다.)
플랫폼: 64비트
환경: PATH=%PATH%;C:\opencv4100\build\x64\vc15\bin
4) 속성->VC++ 디렉토리
포함 디렉터리: C:\opencv4100\build\include
라이브러리 디렉터리: C:\opencv4100\build\x64\vc16\lib
5) 속성->링커->입력
추가 종속성: opencv_world4100d.lib (디버그 모드 라이브러리, 숫자 뒤에 소문자 d는 debug 의미)
6) 테스트 샘플 코드 - 물고기 영상 띄우기
// C++ 버전 #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image; image = imread( "C:/opencv4100/sources/samples/data/HappyFish.jpg" ); imshow( "Test", image ); waitKey(); } |
// C 버전 #include <opencv/cv.h> #include <opencv/highgui.h> int main() { IplImage *image = cvLoadImage("C:/opencv4100/sources/samples/data/HappyFish.jpg"); cvShowImage("Test",image); cvReleaseImage(&image); cvWaitKey(0); } |
* 웹캠 테스트 코드
#include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main(int ac, char** av) { VideoCapture cap(0); if (!cap.isOpened()) { printf("Can't open the camera"); return -1; } Mat img; while (1) { cap >> img; imshow("camera img", img); if (waitKey(1) == 27) break; } return 0; } |
* OpenCV 버전별 변환 함수에 대해 알아보자.
OpenCV 2.x | OpenCV 3.x , OpenCV4.x |
CvPoint2D32f | Point2f |
CvPoint | Point |
IplImage* cvCreateImage gray->imageData | Mat Mat gray.data |
cvLoadImage | imread |
cvCaptureFromCAM cvQueryFrame | VideoCapture cap >> img |
cvNamedWindow | namedWindow |
CV_WINDOW_AUTOSIZE | WINDOW_AUTOSIZE |
cvSize | Size |
cvGetSize(img) | img.size() |
img->width img->height | img.cols img.rows |
cvGetTickCount | getTickCount |
cvCvtColor CV_RGB2GRAY | cvtColor COLOR_RGB2GRAY |
cvThreshold CV_THRESH_BINARY | threshold THRESH_BINARY |
cvZero(prcs_flg); | prcs_flg = Mat::zeros(prcs_flg.size(), prcs_flg.type()); |
cvWarpPerspective cvGetPerspectiveTransform | warpPerspective(src, dst, warp_matrix, dst.size()); warp_matrix = getPerspectiveTransform(srcQuad, dstQuad); |
cvShowImage | imshow |
cvRectangle cvLine | rectangle line |
* Windows에서 OpenCV의 전체 소스를 새로 컴파일 하기
- features2d같은 module 폴더에 있는 것 또는 3dparty 폴더에 있는 라이브러리가 컴파일이 안된 경우 모든 Library들을 생성해보자.
단계 | 설명 |
설치 | 1) OpenCV 4.5.1을 다운받아 압축을 푼다. 2) CMake 설치한다. (https://cmake.org/ 에서 cmake-3.20.3-windows-x86_64.msi 을 선택) |
CMake 컴파일 환경 생성 | 3) CMake에서 컴파일 환경을 생성한다. - source 폴더와 binaries 폴더를 다음과 같이 설정한다. Where is the source code: C:/opencv451/sources Where to build the binaries: C/opencv451/build2 - [Congifure] 버튼을 누르고 나서 혹시 opencv_contrib 파일을 추가로 컴파일 하고 싶으면 파일을 다운받아 다음과 같이 설정한다. - opencv_contrib-master.zip : https://github.com/opencv/opencv_contrib/releases - OPENCV_EXTRA_MODULES_PATH : C:/opencv451/opencv_contrib-master/modules (역슬래쉬사용 주의) - BUILD_opencv_world : [v] (체크 한다.) - [Generate] 버튼을 눌러 프로젝트 파일 *.sln을 생성한다. |
Viwual Studio | 4) C:/opencv451/build2 폴더에서 OpenCV.sln 을 클릭하고 컴파일을 시작한다. 5) 이제 C:/opencv451/build2/lib/Debug 폴더에 opencv_xfeatures2d451d.lib 등의 opencv_contirb 라이브러리가 생성되었으며, 각자 프로젝트에 추가하여 사용한다. |
* Ubuntu에서 OpenCV 설치
방법 | 설명 |
삭제 | # 기존 버전 삭제 $ pkg-config --modversion opencv # 기존버전 확인 $ sudo apt-get purge libopencv* python-opencv # opencv 삭제 $ sudo apt-get autoremove |
패키지 설치 | # 간단한 설치 $ sudo apt update $ sudo apt install libopencv-dev python3-opencv -y # c++ $ pip3 install opencv-contrib-python $ pip3 install opencv-python # 설치 확인 $ python3 -c "import cv2; print(cv2.__version__)" |
OpenCV 4.5.0 | $ sudo apt-get update && sudo apt-get upgrade # install packages $ sudo apt-get install build-essential cmake python3-numpy python3-dev python3-tk libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev libdc1394-dev libeigen3-dev libgtk-3-dev libvtk7-qt-dev -y # download & make $ wget https://github.com/opencv/opencv/archive/4.5.0.tar.gz $ tar -xvzf 4.5.0.tar.gz && sudo rm 4.5.0.tar.gz $ mkdir opencv-4.5.0/build && cd opencv-4.5.0/build $ cmake -DBUILD_EXAMPLES=ON .. # 컴파일 $ nproc # 프로세스 수 확인 가능 $ make -j4 # 4는 프로세스 수 # 설치 $ sudo make install $ echo '/usr/local/lib' | sudo tee --append /etc/ld.so.conf.d/opencv.conf $ sudo ldconfig $ echo 'PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig' | sudo tee --append ~/.bashrc $ echo 'export PKG_CONFIG_PATH' | sudo tee --append ~/.bashrc $ source ~/.bashrc # 확인 $ python3 $ import cv2 $ cv2.__version__ ## opencv 테스트 $ python3 /usr/local/share/opencv4/samples/python/facedetect.py --cascade "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0 |
OpenCV 3.2.0 | $ mkdir opencv $ cd opencv $ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip $ unzip opencv.zip $ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip $ unzip opencv_contrib.zip $ cd opencv-3.2.0/ $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -D WITH_IPP=OFF -D WITH_1394=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_DOCS=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D ENABLE_NEON=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_XINE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D PYTHON_INCLUDE_DIR=/usr/include/python2.7 -D PYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 -D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so ../ $ make -j $ sudo make install $ pkg-config --modversion opencv4 $ pkg-config --libs --cflags opencv4 |
OpenCV 2.4.13 | # install dependencies sudo apt-get update sudo apt-get install -y build-essential sudo apt-get install -y cmake sudo apt-get install -y libgtk2.0-dev sudo apt-get install -y pkg-config sudo apt-get install -y python-numpy python-dev sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install -y libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2 libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils # download opencv-2.4.13 wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.13/opencv-2.4.13.zip unzip opencv-2.4.13.zip cd opencv-2.4.13 mkdir release cd release # compile and install cmake -G "Unix Makefiles" -DCMAKE_CXX_COMPILER=/usr/bin/g++ CMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON -DBUILD_NEW_PYTHON_SUPPORT=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -DINSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DBUILD_FAT_JAVA_LIB=ON -DINSTALL_TO_MANGLED_PATHS=ON -DINSTALL_CREATE_DISTRIB=ON -DINSTALL_TESTS=ON -DENABLE_FAST_MATH=ON -DWITH_IMAGEIO=ON -DBUILD_SHARED_LIBS=OFF -DWITH_GSTREAMER=ON .. make all -j2 # 2 cores sudo make install |
* OpenCV 4.x 영상 Show 테스트
/usr/include/opencv4/opencv2/opencv.hpp
단계 | 설명 |
설치 | $ sudo apt-get install ros-noetic-opencv* $ sudo apt-get install ros-noetic-cv-bridge $ sudo apt-get install ros-noetic-cv-camera $ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib' >> ~/.bashrc $ source ~/.bashrc // 소스 컴파일 및 테스트 $ sudo vi cvimg.cpp $ g++ cvimg.cpp -o cvimg $(pkg-config --libs --cflags opencv4) $ wget http://blog.jinbo.net/attach/615/200937431.jpg $ ./cvimg |
소스 | #include #include int main() { std::cout << "OpenCV Version : " << CV_VERSION << std::endl; cv::Mat img; cv::namedWindow("EXAMPLE01", cv::WINDOW_AUTOSIZE); img = cv::imread("200937431.jpg", cv::IMREAD_COLOR); if (img.empty()) { std::cout << "You can NOT see the cat!" << std::endl; return -1; } cv::imshow("EXAMPLE01", img); cv::waitKey(0); cv::destroyWindow("EXAMPLE01"); return 0; } |
* OpenCV 카메라 테스트 (https://95mkr.tistory.com/entry/ROS6)
단계 | 설명 |
패키지 생성 | cv_bridge 패키지를 생성하여 노드를 만들어서 실행해보자. $ cd ~/catkin_ws/src $ catkin_create_pkg camera_test roscpp cv_bridge $ pkg-config --cflags opencv4 # 설치폴더 확인 $ vi camera_test/src/video.cpp $ vi camera_test/CMakeLists.txt $ sudo vi /opt/ros/noetic/share/cv_bridge/cmake/cv_bridgeConfig.cmake $ cd ~/catkin_ws && catkin_make $ source ~/catkin_ws/devel/setup.bash $ roscore $ rosrun camera_test cv_bridge_test |
make 파일 | cv_bridgeConfig.cmake OpenCV4 폴더를 추가한다. ... set(cv_bridge_FOUND_CATKIN_PROJECT TRUE) if(NOT "include;/usr/include;/usr/include/opencv " STREQUAL " ") set(cv_bridge_INCLUDE_DIRS "") set(_include_dirs "include;/usr/include;/usr/include/opencv4") ... |
CMakeLists.txt | cmake_minimum_required(VERSION 3.0.2) project(camera_test) find_package(catkin REQUIRED COMPONENTS cv_bridge roscpp ) find_package (OpenCV REQUIRED) catkin_package( INCLUDE_DIRS include LIBRARIES camera_test CATKIN_DEPENDS cv_bridge roscpp # DEPENDS system_lib ) include_directories( # include ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ) add_executable(cv_bridge_test src/video.cpp) target_link_libraries(cv_bridge_test ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) |
video.cpp | #include #include #include #include int main (int argc, char** argv){ ros::init(argc, argv, "cv_bridge_test"); cv::VideoCapture cap(0); cv::Mat frame; if(cap.isOpened()) { while(1) { cap >> frame; cv::imshow("streaming video", frame); if(cv::waitKey(1) == 27) break; } } else { std::cout << "CHECK YOUR CAMERA!" << std::endl; } cv::destroyAllWindows(); return 0; } |
|