Ubuntu 19.10: включение и использование модуля камеры Raspberry Pi v2.1
Я установил Ubuntu 19.10 на свой raspberry pi. Я знаю, что raspbian будет лучшим выбором, но мне нужно использовать Ubuntu по другим причинам. Я также установил opencv4 и протестировал его с загрузкой и отображением изображения. Работает отлично!
Затем я хотел настроить мою камеру raspi с sudo raspi-config
, но команда не была найдена, поэтому я попробовал ее через: sudo apt-get install raspi-config
. Это приводит к появлению сообщения "Не удается найти пакет raspi-config".
Я читал через интернет. Затем я попытался включитьstart_x=1
внутри моего /boot/firmware/config.txt
. После перезагрузки теперь я вижуvideo0
устройство под /dev
. Все идет нормально.
Я написал небольшой текст:
#include <opencv2/highgui.hpp>
#include <opencv2/core/types_c.h>
#include <opencv2/videoio.hpp>
using namespace cv;
int main(int argc, char** argv){
VideoCapture cap;
cap.open(0);
Mat frame;
for(;;){
cap.read(frame);
if (frame.empty()){
std::cerr << "Error";}
imshow("Live", frame);
}
return 0;
}
Это приводит к следующим ошибкам:
[ WARN:0] global /opt/opencv/modules/videoio/src/cap_gstreamer.cpp (1758) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory.
[ WARN:0] global /opt/opencv/modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global /opt/opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
Errorterminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.3.0-dev) /opt/opencv/modules/highgui/src/window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
Aborted (core dumped)
Я думаю, что проблема может заключаться в правильной установке камеры, потому что, на мой взгляд, эта ошибка возникает из-за пустого кадра.
Спасибо за помощь!
1 ответ
OpenCV может работать только с USB-камерой, но не с камерой Raspberry Pi.
Аппаратный интерфейс другой.
Вы можете найти некоторые репозитории Picamera C++ в Raspberry Pi Q&A.
Например:
#include <ctime>
#include <fstream>
#include <iostream>
#include <raspicam/raspicam.h>
using namespace std;
int main ( int argc,char **argv ) {
raspicam::RaspiCam Camera; //Camera 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;
}