gpt4 book ai didi

c++ - 使用 C++ 程序中的 raspistill 读取相机图像

转载 作者:行者123 更新时间:2023-11-30 03:35:12 26 4
gpt4 key购买 nike

我喜欢使用至少 60Hz 的 RPi 捕捉图像。我的代码是用 C++ 编写的,我们有一个库 here对于 C++ 接口(interface)。但是那个库最大有 30Hz。我的目标是最低 60 Hz。到目前为止,我发现的是 raspistill可以达到 90Hz,所以我正在尝试将我的 C++ 程序连接到 raspistill 代码。我在这里找到了一个图书馆 PiCam具有与 raspiSTLl 的直接接口(interface)。不太确定,它可以达到 60Hz,我仍在尝试测试它并遇到一些问题。我的查询是

(1)如何使用 C++ 在 RPi 上达到 60Hz fps?

(2)为了与 PiCam 接口(interface),我已经编译、构建和安装了库,没有任何问题。但是当我捕捉时我得到黑色图像。可能是什么问题?我的部分代码如下所示。

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);

img.jpg 是用黑色图像捕获的。

(3)使用PiCam,如何改成灰度图?

最佳答案

我使用来自 hereRaspicam在 Raspberry Pi 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;
}

顺便说一句,它与 CImg 配合得很好.

此外,我还没有时间看看创建一个新线程来处理每一帧是否工作得更快,或者让几个线程在开始时启动并在获取每个线程后使用条件变量启动一个框架。

关于c++ - 使用 C++ 程序中的 raspistill 读取相机图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41440245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com