VS2013+QT5+opencv3.1显示摄像头

时间:2021-06-22 23:16:09

关于QT和VS的基本使用和添加基本的响应函数请参考另一篇博客:
http://blog.csdn.net/shakevincent/article/details/52966557
另外一些简单的opencv的配置在网上有很多的博客:
但是我建议在每次使用的都可以新建一个属性文件,每次需要用到的时候再添加即可,防止添加很多属性后会导致程序无缘无故的缺少很多lib或者Link error 等。
1:放置一个lable控件用于显示图片和一个按键打开摄像头
2:添加响应函数代码:

void QT::But_close()
{
capture.open(0); //open the default camera
capture >> frame;
while (1)
{
capture >> frame;
if (!frame.empty())
{
cv::Mat frame1;
cv::imshow("yuantu", frame);
cv::Canny(frame, frame1, 0, 500, 3);

cv::waitKey(1);
image = Mat2QImage(frame1);
ui.label->setPixmap(QPixmap::fromImage(image));
}

}
}

其中用到了Mat 转化为QImage

QImage  Mat2QImage(cv::Mat cvImg)
{
QImage qImg;
if (cvImg.channels() == 3) //3 channels color image
{

cv::cvtColor(cvImg, cvImg, CV_BGR2RGB);
qImg = QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_RGB888);
}
else if (cvImg.channels() == 1) //grayscale image
{
qImg = QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_Indexed8);
}
else
{
qImg = QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_RGB888);
}

return qImg;

}

VS2013+QT5+opencv3.1显示摄像头

其中一个是QT的显示界面,一个是Opencv直接imshow的结果。