Änderungen Gruppe 30_10_2022 V2
This commit is contained in:
+210
@@ -0,0 +1,210 @@
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user