C++ 使用raspistill从C++;程序

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接口,我已经编译、构建并安装了该库,没有任何

我喜欢用至少60Hz的RPi拍摄图像。我的代码是C++的,我们有一个C++接口的库。但该库的最大频率为30Hz。 我的目标是最低60赫兹。 到目前为止,我发现的是可以达到90Hz,所以我尝试将我的C++程序与RasistSIST代码进行接口。 我在这里找到了一个与raspistll有直接接口的库。不是很确定,它可以达到60赫兹,我仍在尝试测试它,并有一些问题。 我的问题是

(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秒。谢谢,我将实现线程,分割图像读取线程和处理线程。