Win10+qt5.8+opencv3.2打开本地摄像头,显示视频是黑色的,什么都没有

qq_21876195 2017-04-12 07:52:36
本人刚开始使用opencv处理图像,好不容易将opencv和qt环境搭建好,就小试牛刀,结果打开笔记本摄像头后,显示的全是黑色的画面,不管是用cvCaptureFromCAM、VideoCapture或者是使用cvCreateCameraCapture来打开摄像头,结果都不行。但是又能够将本地的图片压缩成avi视频,并且播放。下面是我的代码和截图,求大神的指教啊:
//声明IplImage指针
IplImage* pFrame = NULL;
//获取摄像头
CvCapture* pCapture = cvCaptureFromCAM(0);// cvCreateCameraCapture(0);
cvWaitKey(200);
//创建窗口
cvNamedWindow("Video", 1);
//显示视屏
while (1){
pFrame = cvQueryFrame(pCapture);
if (!pFrame)break;
cvShowImage("Video", pFrame);
int c = cvWaitKey(33);
if (c == 27)break;
}
cvReleaseCapture(&pCapture);
cvDestroyWindow("Video");


或者是:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

widget::widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::widget)
{
ui->setupUi(this);

cam = NULL;
timer = new QTimer(this);
imag = new QImage(); // 初始化

/*信号和槽*/
connect(timer, SIGNAL(timeout()), this, SLOT(readFarme())); // 时间到,读取当前摄像头信息
connect(ui->open, SIGNAL(clicked()), this, SLOT(openCamara()));
connect(ui->pic, SIGNAL(clicked()), this, SLOT(takingPictures()));
connect(ui->closeCam, SIGNAL(clicked()), this, SLOT(closeCamara()));
}
/******************************
********* 打开摄像头 ***********
*******************************/
void widget::openCamara()
{
cam = cvCreateCameraCapture(0); //打开摄像头,从摄像头中获取视频
// cam = VideoCapture(0); //打开摄像头,从摄像头中获取视频

timer->start(200); // 开始计时,超时则发出timeout()信号
}

/*********************************
********* 读取摄像头信息 ***********
**********************************/
void widget::readFarme()
{
frame = cvQueryFrame(cam);// 从摄像头中抓取并返回每一帧

qDebug()<<"frame"<<frame;

// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不同的摄像头用不同的格式。
// QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);
QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();
qDebug()<<"image"<<image;

ui->label->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上
}

/*************************
********* 拍照 ***********
**************************/
void widget::takingPictures()
{
frame = cvQueryFrame(cam);// 从摄像头中抓取并返回每一帧

// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不同的摄像头用不同的格式。
// QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);
QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();
ui->label_2->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上
}

/*******************************
***关闭摄像头,释放资源,必须释放***
********************************/
void widget::closeCamara()
{
timer->stop(); // 停止读取数据。

cvReleaseCapture(&cam);//释放内存;
}

widget::~widget()
{
delete ui;
}



...全文
1893 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21876195 2017-11-22
  • 打赏
  • 举报
回复
其实可以不适用opencv类的函数来打开本地摄像头,直接使用qt中正对摄像头的类的接口函数就行了。能打开本地摄像头, 然后采用OpenCV来进行视频压缩也可以实现
jsxyhelu2015 2017-11-16
  • 打赏
  • 举报
回复
看看这个,我在pi上实现是成功的
http://www.cnblogs.com/jsxyhelu/p/7844424.html
matrix-walker 2017-10-26
  • 打赏
  • 举报
回复
it's ok? help help thanks!
matrix-walker 2017-10-26
  • 打赏
  • 举报
回复
ok le ma? help help help
单单单单点 2017-06-30
  • 打赏
  • 举报
回复
哇, 同样求解,我是用jepg streamer重定向视频流然后QWebview打开,一样黑屏,你解决了吗
saopi9551 2017-06-08
  • 打赏
  • 举报
回复
qt5.8 opencv 3.2 的同样出现黑屏
赵4老师 2017-04-13
  • 打赏
  • 举报
回复
先单独运行OpenCV的相关例子。

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧