|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
-
- This library allows to use the Raspberry Pi Camera.
-
- * Main features:
- - Provides class RaspiCam for easy and full control of the camera
- - Provides class RaspiCam_Cv for easy control of the camera with OpenCV.
- - Provides class RaspiCam_Still and RaspiCam_Still_Cv for controlling the camera in still mode
- - Easy compilation/installation using cmake.
- - No need to install development file of userland. Implementation is hidden.
- - Many examples
-
- * ChangeLog
- 0.1.3
- - Native support for BGR and RGB in opencv classes. No need to do conversion anymore.
- 0.1.2
- - Solved deadlock error in grab
- 0.1.1
- - Moved to c++11 mutex and condition_variables. Bug fixed that caused random dead lock condition in grab()
- 0.1.0
- - Bug fixed in release for RapiCam and RaspiCam_Cv
- 0.0.7
- - Added classes RaspiCam_Still and RaspiCam_Still_Cv for still camera mode
- 0.0.6
- - Bug ins cv camera corrected
- 0.0.5
- - getImageBuffeSize change by getImageBufferSize (sorry)
- - Change in capture format. Now, it is able to capture in RGB at high speed.
- - The second parameter of retrieve is now useless. Format must be specified in Raspicam::(set/get)Format before opening the camera and can not be change during operation.
- - RaspiCam_Cv captures in BGR, which is obtained by converting from RGB. Therefore, performance drops to half repect to the RaspiCam in RGB mode when using 1280x960.
- 0.0.4
- - Added shutter speed camera control
- - OpenCv set/get params are now scaled to [0,100]
- - Added more command line options in test programs
- 0.0.3
- - Fixed error in color conversion (rgb and bgr were swapped)
- - Added command line options in raspicam_test to adjust exposure
- - Changes in RaspiCam_Cv so that exposure can be adjusted. Very simply.
- 0.0.2
- - Decoupled opening from the start of capture in RaspiCam if desired. RapiCam::open and RaspiCam::startCapture
- - Added function RaspiCam::getId and RaspiCam_Cv::getId
- - Added a new way to convert yuv2rgb which is a bit faster.Thanks to Stefan Gufman (gruffypuffy at gmail dot com)
- - Added command line option -test_speed to utils programs (do not save images to memory)
- - Removed useless code in private_impl
-
- 0.0.1
- Initial libary
-
-
- * Compiling
-
- Download the file to your raspberry. Then, uncompress the file and compile
-
- tar xvzf raspicamxx.tgz
- cd raspicamxx
- mkdir build
- cd build
- cmake ..
-
- At this point you'll see something like
- -- CREATE OPENCV MODULE=1
- -- CMAKE_INSTALL_PREFIX=/usr/local
- -- REQUIRED_LIBRARIES=/opt/vc/lib/libmmal_core.so;/opt/vc/lib/libmmal_util.so;/opt/vc/lib/libmmal.so
- -- Change a value with: cmake -D<Variable>=<Value>
- --
- -- Configuring done
- -- Generating done
- -- Build files have been written to: /home/pi/raspicam/trunk/build
-
- If OpenCV development files are installed in your system, then you see
- -- CREATE OPENCV MODULE=1
- otherwise this option will be 0 and the opencv module of the library will not be compiled.
-
- Finally compile and install
- make
- sudo make install
-
-
- After that, you have the programs raspicam_test and raspicam_cv_test (if opencv was enabled).
- Run the first program to check that compilation is ok.
-
- You can check that the library has installed the header files under /usr/local/lib/raspicam , and the libraries in
- /usr/local/lib/libraspicam.so and /usr/local/lib/libraspicam_cv.so (if opencv support enabled)
-
- * Using it in your projects
-
- We provide a simple example to use the library. Create a directory for our own project.
-
- First create a file with the name simpletest_raspicam.cpp and add the following code
-
- /**
- */
- #include <ctime>
- #include <unistd.h>
- #include <fstream>
- #include <iostream>
- #include <raspicam/raspicam.h>
- using namespace std;
-
- int main ( int argc,char **argv ) {
- raspicam::RaspiCam Camera; //Cmaera object
- //Open camera
- cout<<"Opening Camera..."<<endl;
- if ( !Camera.open()) {cerr<<"Error opening camera"<<endl;return -1;}
- //wait a while until camera stabilizes
- cout<<"Sleeping for 3 secs"<<endl;
- sleep(3);
- //capture
- Camera.grab();
- //allocate memory
- unsigned char *data=new unsigned char[ Camera.getImageTypeSize ( raspicam::RASPICAM_FORMAT_RGB )];
- //extract the image in rgb format
- Camera.retrieve ( data,raspicam::RASPICAM_FORMAT_RGB );//get camera image
- //save
- std::ofstream outFile ( "raspicam_image.ppm",std::ios::binary );
- outFile<<"P6\n"<<Camera.getWidth() <<" "<<Camera.getHeight() <<" 255\n";
- outFile.write ( ( char* ) data, Camera.getImageTypeSize ( raspicam::RASPICAM_FORMAT_RGB ) );
- cout<<"Image saved at raspicam_image.ppm"<<endl;
- //free resrources
- delete data;
- return 0;
- }
- //
-
- Now, create a file named CMakeLists.txt and add:
- #####################################
- cmake_minimum_required (VERSION 2.8)
- project (raspicam_test)
- set (CMAKE_MODULE_PATH "/usr/local/lib/cmake/${CMAKE_MODULE_PATH}")
- find_package(raspicam REQUIRED)
- add_executable (simpletest_raspicam simpletest_raspicam.cpp)
- target_link_libraries (simpletest_raspicam ${raspicam_LIBS})
- #####################################
-
- Finally, create,compile and execute
- mkdir build
- cd build
- cmake ..
- make
- ./simpletest_raspicam
-
- A more complete sample project is provided in SourceForge.
-
- * OpenCV Interface
-
- If the OpenCV is found when compiling the library, the libraspicam_cv.so module is created and the RaspiCam_Cv class available.
- Take a look at the examples in utils to see how to use the class. In addition, we show here how you can use the RaspiCam_Cv in your own project using cmake.
-
-
- First create a file with the name simpletest_raspicam_cv.cpp and add the following code
-
- #include <ctime>
- #include <iostream>
- #include <raspicam/raspicam_cv.h>
- 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_FORMAT, CV_8UC1 );
- //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;
- //save image
- cv::imwrite("raspicam_cv_image.jpg",image);
- cout<<"Image saved at raspicam_cv_image.jpg"<<endl;
- }
-
-
-
- Now, create a file named CMakeLists.txt and add:
- #####################################
- cmake_minimum_required (VERSION 2.8)
- project (raspicam_test)
- set (CMAKE_MODULE_PATH "/usr/local/lib/cmake/${CMAKE_MODULE_PATH}")
- find_package(raspicam REQUIRED)
- find_package(OpenCV)
- IF ( OpenCV_FOUND AND raspicam_CV_FOUND)
- MESSAGE(STATUS "COMPILING OPENCV TESTS")
- add_executable (simpletest_raspicam_cv simpletest_raspicam_cv.cpp)
- target_link_libraries (simpletest_raspicam_cv ${raspicam_CV_LIBS})
- ELSE()
- MESSAGE(FATAL_ERROR "OPENCV NOT FOUND IN YOUR SYSTEM")
- ENDIF()
- #####################################
-
- Finally, create,compile and execute
- mkdir build
- cd build
- cmake ..
- make
- ./simpletest_raspicam_cv
-
|