2016/11/20
Pi NoIR Camera V2で遊ぶ(3)
前回までで、赤外線カメラPi NoIR Camera V2をOpenCVでも使える状態にしましたので、今回は実際にコードを書いて動かしてみます。このサイトにあるサンプルプログラム(simpletest_raspicam_cv.cpp )を一部変更して、以下のプログラムraspicam_cv_samp.cppを作成しました。元々は100枚のモノクロ画像を撮影して、フレームレートを求め、その画像を保存するプログラムでした。今回は、カラー画像を撮像して、フレームレートと、撮像画像をグレー処理、二値化処理し、それらの画像を保存するプログラムに変更しました。
//raspicam_cv_samp.cpp
#include <ctime>
#include <iostream>
#include <raspicam/raspicam_cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
int main (int argc,char **argv) {
time_t timer_begin,timer_end;
raspicam::RaspiCam_Cv Camera;
cv::Mat image;
int nCount=100;
//set camera params
//Camera.set(CV_CAP_PROP_FORMAR, CV_8UC1); //monochrome
Camera.set(CV_CAP_PROP_FORMAT, CV_8UC3); //color
//Open camera
cout<<"Opening Camera..."<<endl;
if (!Camera.open()) {cerr<<"Error opening the camera"<<endl;return -1;}
//Start capture
cout<<"Capturing "<<nCount<<" frames ...."<<endl;
time (&timer_begin);
for (int i=0; i<nCount; i++) {
Camera.grab();
Camera.retrieve (image);
if (i%5==0) cout<<"\r captured "<<i<<" images"<<std::flush;
}
cout<<"Stop camera..."<<endl;
Camera.release();
//show time statistics
time (&timer_end); /* get current time; same as: timer = time(NULL) */
double secondsElapsed = difftime (timer_end,timer_begin);
cout<< secondsElapsed<<" seconds for "<< nCount<<" frames : FPS = "<< (float) ((float)(nCount) /secondsElapsed) <<endl;
//image proc
cv::Mat grayimage;
cv::Mat thresholdimage;
cv::cvtColor(image, grayimage, CV_RGB2GRAY); //Monochrome
cv::threshold(grayimage, thresholdimage, 128, 255, cv::THRESH_BINARY); //Binarize
//save image
cv::imwrite("raspicam_cv_image.jpg",image);
cout<<"Image saved at raspicam_cv_image.jpg"<<endl;
cv::imwrite("raspicam_cv_grayimage.jpg",grayimage);
cout<<"Image saved at raspicam_cv_grayimage.jpg"<<endl;
cv::imwrite("raspicam_cv_thresholdimage.jpg",thresholdimage);
cout<<"Image saved at raspicam_cv_thresholdimage.jpg"<<endl;
}
このソースプログラムは、~/git/raspicam/utils/フォルダに保存し、以下のCMakeLists.txtも同じフォルダに保存しました。
作業フォルダ~/git/raspicam/utils/で以下のコマンドを実行し、exeファイルを作成しました。
cmake_minimum_required (VERSION 2.8)
project (sample)
find_package(raspicam REQUIRED)
find_package(OpenCV)
IF ( OpenCV_FOUND AND raspicam_CV_FOUND)
MESSAGE(STATUS "COMPILING OPENCV TESTS")
add_executable (raspicam_cv_samp raspicam_cv_samp.cpp)
target_link_libraries (raspicam_cv_samp ${raspicam_CV_LIBS})
ELSE()
MESSAGE(FATAL_ERROR "OPENCV NOT FOUND IN YOUR SYSTEM")
ENDIF()
cmake .
make
exeファイル「raspicam_cv_samp」は、~/git/raspicam/utils/utils/内に作成されました。以下のコマンドでプログラムを実行させました。
sudo ./raspicam_cv_samp
結果は、以下の通りでした。画像は上から、生カラー画像、グレー画像、二値化画像です。



