C++ 使用raspistill从C++;程序
我喜欢用至少60Hz的RPi拍摄图像。我的代码是C++的,我们有一个C++接口的库。但该库的最大频率为30Hz。 我的目标是最低60赫兹。 到目前为止,我发现的是可以达到90Hz,所以我尝试将我的C++程序与RasistSIST代码进行接口。 我在这里找到了一个与raspistll有直接接口的库。不是很确定,它可以达到60赫兹,我仍在尝试测试它,并有一些问题。 我的问题是C++ 使用raspistill从C++;程序,c++,raspberry-pi,raspberry-pi2,raspberry-pi3,C++,Raspberry Pi,Raspberry Pi2,Raspberry Pi3,我喜欢用至少60Hz的RPi拍摄图像。我的代码是C++的,我们有一个C++接口的库。但该库的最大频率为30Hz。 我的目标是最低60赫兹。 到目前为止,我发现的是可以达到90Hz,所以我尝试将我的C++程序与RasistSIST代码进行接口。 我在这里找到了一个与raspistll有直接接口的库。不是很确定,它可以达到60赫兹,我仍在尝试测试它,并有一些问题。 我的问题是 (1)如何在C++中使用C++ +有60Hz FPS? (2) 为了与PiCam接口,我已经编译、构建并安装了该库,没有任何
(1)如何在C++中使用C++ +
有60Hz FPS? (2) 为了与PiCam接口,我已经编译、构建并安装了该库,没有任何问题。 但当我拍摄时,我得到了黑色的图像。可能是什么问题?我的代码的一部分如下所示CCamera* cam = StartCamera(640, 480,60,1,true);
char mybuffer[640 * 480 * 4];
int ret = cam->ReadFrame(0, mybuffer, sizeof(mybuffer));
cout << " ret " << ret << endl;
Mat img(480, 640, CV_8UC4,mybuffer);
imwrite("img.jpg", img);
CCamera*cam=StartCamera(640480,60,1,真);
char mybuffer[640*480*4];
int-ret=cam->ReadFrame(0,mybuffer,sizeof(mybuffer));
cout我在树莓皮3上使用树莓皮,在黑白模式下获得约90 fps
我目前正在将代码重新用于其他用途,因此它并非100%完美地满足您的需求,但应该会让您继续
#include <ctime>
#include <fstream>
#include <iostream>
#include <raspicam/raspicam.h>
#include <unistd.h> // for usleep()
using namespace std;
#define NFRAMES 1000
#define WIDTH 1280
#define HEIGHT 960
int main ( int argc,char **argv ) {
raspicam::RaspiCam Camera;
// Allowable values: RASPICAM_FORMAT_GRAY,RASPICAM_FORMAT_RGB,RASPICAM_FORMAT_BGR,RASPICAM_FORMAT_YUV420
Camera.setFormat(raspicam::RASPICAM_FORMAT_GRAY);
// Allowable widths: 320, 640, 1280
// Allowable heights: 240, 480, 960
// setCaptureSize(width,height)
Camera.setCaptureSize(WIDTH,HEIGHT);
// Open camera
cout<<"Opening Camera..."<<endl;
if ( !Camera.open()) {cerr<<"Error opening camera"<<endl;return -1;}
// Wait until camera stabilizes
cout<<"Sleeping for 3 secs"<<endl;
usleep(3000000);
cout << "Grabbing " << NFRAMES << " frames" << endl;
// Allocate memory for camera buffer
unsigned long bytes=Camera.getImageBufferSize();
cout << "Width: " << Camera.getWidth() << endl;
cout << "Height: " << Camera.getHeight() << endl;
cout << "ImageBufferSize: " << bytes << endl;;
unsigned char *data=new unsigned char[bytes];
for(int frame=0;frame<NFRAMES;frame++){
// Capture frame
Camera.grab();
// Extract the image
Camera.retrieve (data,raspicam::RASPICAM_FORMAT_IGNORE);
}
}
return 0;
}
#包括
#包括
#包括
#包括
#包括//用于usleep()
使用名称空间std;
#定义NFRAMES 1000
#定义宽度1280
#定义高度960
int main(int argc,字符**argv){
拉斯皮卡姆:拉斯皮卡姆照相机;
//允许值:RASPICAM_格式\u灰色、RASPICAM_格式\u RGB、RASPICAM_格式\u BGR、RASPICAM_格式\u YUV420
setFormat(raspicam::raspicam\u FORMAT\u GRAY);
//允许宽度:3206401280
//允许高度:240480960
//setCaptureSize(宽度、高度)
照相机。设置捕获大小(宽度、高度);
//开放式摄像机
马克·塞切尔的回答是正确的
但我发现设置帧速率参数并没有在API级别公开,也不能设置帧速率。默认帧速率为30 Hz。
可以在src/private/private_impl.cpp文件中更改它。我将其设置为60Hz,现在它可以工作。是的,目前我使用该库,它的最大帧速率为30Hz。您是否测试过90Hz fps?没有设置fps的配置。我的图像处理大约需要10ms,因此,如果我从文件中读取图像,我可以达到100Hz。但我使用该库对于640x480帧大小,我可以有30Hz的最大频率。所以从相机读取是我的瓶颈。如何使用lbrary设置更高的fps?我可以读取90+fps。我不设置速率,我只是尽可能快地读取帧。尝试读取1000帧并测量时间-然后减去3秒的稳定时间。我得到了大约14秒。谢谢,我将实现线程,分割图像读取线程和处理线程。