我有一个灰度相机(不是彩色的),并试图渲染图像。我在Raspbian上运行,在Raspberry Pi 2上。我抓取了一些代码,并尽可能地展示了它,并取得了一些进展:
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
bool rtn;
// rtn = cap.set(CV_CAP_PROP_FRAME_WIDTH , 752);
// cout << "set to 752:" << rtn << endl;
// rtn = cap.set(CV_CAP_PROP_FRAME_HEIGHT , 480);
// cout << "set to 480:" << rtn << endl;
int count = 1;
Mat edges;
namedWindow("edges",1);
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
cout << "cols:" <<frame.cols << endl;
cout << "rows:" << frame.rows << endl;
cout << "count:" << count++ << endl;
cout << "Channel Count:"<< frame.channels() << endl;
// cvtColor(frame, edges, CV_BGR2GRAY);
imshow("edges", edges);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}.现在我得到了灰度图像,但它只运行了几帧(2-4帧,视情况而定),然后挂起。有趣的是,如果你等待的时间足够长,有时它会在"select timeout“消息之后扫描更多的帧。
在运行应用程序之前,我尝试运行以下命令,但似乎没有什么帮助:
rmmod uvcvideo
modprobe uvcvideo nodrop=1 timeout=5000此外,即使我指定相机分辨率为720x480 (根据相机规格),它报告的帧大小为640x480。
似乎当我去掉下面的代码时:
cvtColor(frame, edges, CV_BGR2GRAY);它可以工作,但它不是灰度图像,它是绿色的。请注意,我已经注释掉了设置框架的宽度和高度。
发布于 2015-11-21 21:04:07
因为你是从摄像头捕获帧,所以只要帧准备好了,它就会捕获一帧,所以你不需要等待30毫秒,只需1毫秒就足够了,在将帧转换为灰色之前,请确保它有3个通道(作为RGB或BGR帧)。
顺便说一下,cv::VideoCapture::Set函数可能在某些设备或某些属性上不起作用。为了设置图像尺寸,你应该检查你的相机接受的尺寸,例如,它可能只接受320x200,640x480,600x800,...
发布于 2015-12-16 06:13:30
结果是我的电源出了问题。我从pi板增加了电源(在/boot/config.txt中有一个这样做的设置),但这是不够的。我添加了一个USB电源分路器,并使用了一个工作台电源。
https://stackoverflow.com/questions/33812787
复制相似问题