qml+opencv3.1简单打开摄像头,关闭摄像头
借鉴前人经验 http://blog.csdn.net/luoyayun361/article/details/61936032
利用
继承QQuickImageProvider类的方法来完成opencv读取摄像头每一帧,并利用QImage绘制并发送给qml端的Image
直接上代码
#ifndef IMAGEPROVIDER_H
#define IMAGEPROVIDER_H
#include<QImage>
#include<QQuickImageProvider>
class ImageProvider : public QQuickImageProvider
{
public:
ImageProvider();
QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize);
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize);
QImage img;
};
#endif // IMAGEPROVIDER_H
#include "imageprovider.h"
#include<QDebug>
ImageProvider::ImageProvider()
: QQuickImageProvider(QQuickImageProvider::Image)
/本例中未使用Pixmap来绘制图像,若要使用其,只需要将Image替换为Pixmap
{
}
QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
{
qDebug()<<"requestImage";
return this->img;
}
QPixmap ImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
qDebug()<<"requestPixmap";
return QPixmap::fromImage(this->img);
}
#ifndef IMAGESHOW_H
#define IMAGESHOW_H
#include<imageprovider.h>
#include<opencv.hpp>
using namespace cv;
class ShowImage : public QObject
{
Q_OBJECT
public:
explicit ShowImage(QObject *parent = 0);
ImageProvider *m_pImgProvider;
QImage MattoQImage(Mat cvImg);
public slots:
void setImage();
void closeCamera();
signals:
void callQmlRefeshImg();
private:
Mat src_frame;
// QImage image;
VideoCapture capture;
};
#endif // IMAGESHOW_H
#include<imageshow.h>
#include<QDebug>
ShowImage::ShowImage(QObject *parent) :
QObject(parent)
{
m_pImgProvider = new ImageProvider();
capture=VideoCapture(0);
}
void ShowImage::closeCamera()
{
capture.release();
}
void ShowImage::setImage()
{
capture>>src_frame;
m_pImgProvider->img = MattoQImage(src_frame);
emit callQmlRefeshImg();
qDebug()<<"setImage";
}
QImage ShowImage::MattoQImage(Mat cvImg)
{
QImage qImg;
if(cvImg.channels()==3)
{
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) {
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;
}
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include<QQmlContext>
#include<QDebug>
#include<imageshow.h>
#include<opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
ShowImage *CodeImage = new ShowImage();
QQmlApplicationEngine W;
W.rootContext()->setContextProperty("CodeImage",CodeImage);
W.addImageProvider(QLatin1String("CodeImg"), CodeImage->m_pImgProvider);
W.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World");
Timer{
id:count;
interval: 25;
running: false;
repeat: true
onTriggered: {
CodeImage.setImage();
}
}
Button{
id:open;
text:"打开摄像头"
width:100;
height:30;
anchors.left: parent.left;
anchors.top:parent.top;
anchors.leftMargin: 10;
anchors.topMargin: 10;
onClicked:{
count.running=true;
}
}
Button{
id:quit;
text:"关闭摄像头"
width:100;
height:30;
anchors.left: parent.left;
anchors.top:open.bottom;
anchors.leftMargin: 10;
anchors.topMargin: 10;
onClicked:{
count.running=false;
CodeImage.closeCamera();
Qt.quit();
}
}
Image{
id:img;
width:400;
height:400;
anchors.centerIn: parent;
cache:false;
}
Connections{
target: CodeImage
onCallQmlRefeshImg:{
img.source = "";
img.source = "image://CodeImg";
console.log("no");
}
}
}
qml+opencv3.1简单打开摄像头,关闭摄像头相关推荐
- 调用摄像头_摄像头 | 浏览器调用摄像头并实现截图保存的效果
为了在QT上实现打开摄像头,拍照等操作.就写了这个. 1. 写一个vue组件 先写一个vue的组件,其内容基本如下: <el-button type="primary" @ ...
- OpenCV+VS2019打开和关闭电脑摄像头
关于OpenCV和VS2019的配置,请参考博客以前的连接. OpenCV中主要使用videocapture来打开和关闭摄像头 https://docs.opencv.org/master/d8/df ...
- MFC+opencv实现摄像头的打开与关闭
下面以vs2013+opencv2.4.9的实验环境做出演示: 首先建立对话框工程对话框,界面如下: 设置定时器来更新picture显示框 在CMFCdisplayDlg.h中添加以下变量 priva ...
- RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播流媒体服务器EasyNVR证书配置页面按钮无法正常打开和关闭的问题解析
进入移动互联网时代以来,企业微信公众号已成为除官网以外非常重要的宣传渠道,当3.2亿直播用户与9亿微信用户的势能累加,在微信上开启直播已成为越来越多企业的必然选择. 安防视频流媒体服务器EasyNVR ...
- 如何用openvr api打开vive前置摄像头
随着越来越多的开发者开始他们的VR开发工作,他们看到了这项技术的巨大潜力,像是Valve这样的公司正在想办法保证他们的软件开发包(SDK)能够提供尽量多的功能.今天这家公司发布了其针对SteamVR的 ...
- 用python打开多个摄像头_了解使用python和OpenCV与VideoCaptu进行多个网络摄像头捕获...
我正在尝试同时(或几乎同时)从多个网络摄像头捕捉图像.我一直在玩OpenCV.VideoCapture和python编程.但有些困惑,希望有人能帮忙解释... 首先,我尝试了视频捕捉(Markus G ...
- js调用(前/后)摄像头,截取照片,关闭摄像头
全部代码:(详细注释已在代码中标明) <!DOCTYPE html> <html lang="en"> <head><meta chars ...
- js调用pc摄像头实现拍照、录视频等,新版Chrome无访问http页面无法打开麦克风、摄像头
js调用pc摄像头实现拍照.录视频等,新版Chrome无访问http页面无法打开麦克风.摄像头 新版Chrome配置 vue环境下的前端 function部分 ##由于没有https环境,只有http ...
- 【R9000P相机问题】打开相机应用摄像头无法使用,显示小锁的图标处理方法
故障现象: 打开相机应用摄像头无法使用,显示小锁的图标 原因分析: 联想电脑管家里摄像头隐私模式开启有关. 打开相机应用摄像头无法使用,显示小锁的图标处理. 解决方法: 一.管家4.0版本工具箱截图: ...
最新文章
- vue中点击导航栏部分,页面切换
- react循环setstate_react -- 关于兄弟组件触发更新的问题
- IDEA Terminal命令行运行javac时,一个类运用另一个类的方法找不到符号的问题
- 云拨测助力节卡机器人,全面优化海外网站性能
- (论坛答疑点滴)DataGrid的EditCommandColumn如何使用图片作为按钮?
- MVC强类型和弱类型的区别
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-8CDH5安装和集群配置
- request-爬取一张图片的练习-答案-私
- 各大厂商CTR广告预估模型的优缺点对比
- Eureka的自我保护模式
- c语言中rcu缩写,ICU、MICU、EICU、NICU、NCU、CCU、RCU,科室英文缩写大全
- centos下安装teamview
- Idea新建项目和快捷键
- BroadcastReceiver生命周期探讨
- 基于Huffman算法实现文件压缩解压缩(C语言)
- 一文讲透 CentOS 开机流程
- 符号表工具addr2line
- 网页编码与数据传递中的中文字符编码
- Glide 入门到精通之四——图片缩放和调整大小
- arcgis javascript Measurement的使用
热门文章
- 基于Python实现的孤立词语音识别系统
- SinuTrain for SINUMERIK 仿真西门子最新版仿真软件
- SAP 科目的 未清项管理的理解
- 参考平面及其高度_某层平面图的剖切位置高度一般是离该层地面1.0米--求规范出处...
- Linux学习总结(59)——为什么建议大家使用 Linux 开发
- 09 | 校招简历投递渠道汇总与对比分析,选对渠道才能事半功倍
- 常常被问路吗?我今年一共 26 次!
- 四位顶级AI大牛纵论:深度学习和大数据结合的红利还能持续多久?
- NCRE 四级数据库工程师教程,例题加解析,干货
- 南大软工考研参考书目