VS 2017+Qt5+Opencv 3.4 카메라 로 촬영 및 저장
2.헤더 파일 을 바로 붙 이 고 나중에 시간 이 있 으 면 천천히 설명 하 세 요.
#pragma once
#include <QtWidgets/QWidget>
#include "ui_camaraGet.h"
#ifndef CAMARAGET_H
#define CAMARAGET_H
#include <opencv2\core\core.hpp>
#include <QWidget>
#include <QImage>
#include <QTimer> //
#include <QGraphicsScene>
#include <QGraphicsView>
#include <highgui/highgui_c.h> // opencv
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp> //opencv
#include <opencv/cv.hpp>
using namespace cv;
namespace Ui {
class camaraGet;
}
class camaraGet : public QWidget
{
Q_OBJECT
public:
explicit camaraGet(QWidget *parent = 0);
~camaraGet();
private slots:
void openCamara(); //
void getFrame(); //
void closeCamara(); // 。
void takingPictures(); //
private:
Ui::camaraGet ui;
QTimer *timer;
QImage *imag;
CvCapture *cam;// ,
IplImage *frame;
VideoCapture capture1;
Mat showimage;
QImage Mat2Qimage(Mat cvImg);
// camaraGet(QWidget * parent);
// IplImage ,
};
#endif // CAMARAGET_H
3.원본 파일
#pragma once
#include <QtWidgets/QWidget>
#include "ui_camaraGet.h"
#ifndef CAMARAGET_H
#define CAMARAGET_H
#include <opencv2\core\core.hpp>
#include <QWidget>
#include <QImage>
#include <QTimer> //
#include "camaraGet.h"
#include<stdlib.h>
#include<random>
using namespace cv;
using namespace std;
camaraGet::camaraGet(QWidget *parent):
QWidget(parent)
{
ui.setupUi(this);
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(openCamara()));
connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(takingPictures()));
connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(closeCamara()));
setWindowTitle(tr("Main Window"));
timer = new QTimer(this);
imag = new QImage();
connect(timer, SIGNAL(timeout()), this, SLOT(getFrame()));//
}
camaraGet::~camaraGet()
{
}
void camaraGet::openCamara()
{
capture1.open(1); // ,
timer->start(10);
}
void camaraGet::getFrame() {
capture1 >> showimage;
QImage imag = Mat2Qimage(showimage);
ui.label_2->setScaledContents(true);
ui.label_2->setPixmap(QPixmap::fromImage(imag));
}
void camaraGet::closeCamara()
{
timer->stop();
ui.label->clear();
capture1.release();
}
string strRand(int length) { // length:
char tmp; // tmp:
string buffer; // buffer:
random_device rd; // std::random_device rd
default_random_engine random(rd()); // rd random
for (int i = 0; i < length; i++) {
tmp = random() % 36;
if (tmp < 10) {
tmp += '0';
}
else {
tmp -= 10;
tmp += 'A';
}
buffer += tmp;
}
return buffer;
}
void camaraGet::takingPictures()
{
capture1.open(1);
capture1 >> showimage;
QImage img = Mat2Qimage(showimage);
ui.label->setScaledContents(true);
ui.label->setPixmap(QPixmap::fromImage(img));
string writePath = "../tempPhoto/";
string name;
int i = 0;
name = writePath + strRand(4) + ".jpg";
imwrite(name, showimage);
i++;
}
QImage camaraGet::Mat2Qimage(Mat cvImg)
{
// 8-bits unsigned, NO. OF CHANNELS = 1
if (cvImg.type() == CV_8UC1)
{
QImage image(cvImg.cols, cvImg.rows, QImage::Format_Indexed8);
// Set the color table (used to translate colour indexes to qRgb values)
image.setColorCount(256);
for (int i = 0; i < 256; i++)
{
image.setColor(i, qRgb(i, i, i));
}
// Copy input Mat
uchar *pSrc = cvImg.data;
for (int row = 0; row < cvImg.rows; row++)
{
uchar *pDest = image.scanLine(row);
memcpy(pDest, pSrc, cvImg.cols);
pSrc += cvImg.step;
}
return image;
}
// 8-bits unsigned, NO. OF CHANNELS = 3
else if (cvImg.type() == CV_8UC3)
{
// Copy input Mat
const uchar *pSrc = (const uchar*)cvImg.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, cvImg.cols, cvImg.rows, cvImg.step, QImage::Format_RGB888);
return image.rgbSwapped();
}
else if (cvImg.type() == CV_8UC4)
{
// qDebug() << "CV_8UC4";
// Copy input Mat
const uchar *pSrc = (const uchar*)cvImg.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, cvImg.cols, cvImg.rows, cvImg.step, QImage::Format_ARGB32);
return image.copy();
}
else
{
// qDebug() << "ERROR: Mat could not be converted to QImage.";
return QImage();
}
}
#include <QGraphicsScene>
#include <QGraphicsView>
#include <highgui/highgui_c.h> // opencv
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp> //opencv
#include <opencv/cv.hpp>
using namespace cv;
namespace Ui {
class camaraGet;
}
class camaraGet : public QWidget
{
Q_OBJECT
public:
explicit camaraGet(QWidget *parent = 0);
~camaraGet();
private slots:
void openCamara(); //
void getFrame(); //
void closeCamara(); // 。
void takingPictures(); //
private:
Ui::camaraGet ui;
QTimer *timer;
QImage *imag;
CvCapture *cam;// ,
IplImage *frame;
VideoCapture capture1;
Mat showimage;
QImage Mat2Qimage(Mat cvImg);
// camaraGet(QWidget * parent);
// IplImage ,
};
#endif // CAMARAGET_H
4.실행 효과전체 항목 다운로드:QtWidgetsApplication2_jb51.rar
VS 2017+Qt5+Opencv 3.4 카메라 로 사진 을 찍 고 저장 하 는 글 을 소개 합 니 다.더 많은 Qt5 Opencv 3.4 사진 을 찍 고 저장 하 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt5 텍스트 편집기 구현(상세 코드 첨부)메뉴 인터페이스 설정 메뉴 인터페이스 저희 가 코드 를 바로 올 리 도록 하 겠 습 니 다. 먼저 그림 을 PDF 로 돌 리 려 면 디 렉 터 리 가 아 닌 pdf 파일 을 선택해 야 합 니 다 그 다음 에 PDF ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.