cvui-读取图片或者打开摄像头
丰富了前面的读取图片功能,将读取摄像头也加上去了.
ui.h
#pragma once
#include <string>
#include <iostream>
#include <opencv2/opencv.hpp>
#include "Utils.h"
#define CVUI_IMPLEMENTATION
#include "cvui/cvui.h"
#define WINDOW_NAME "CVUI"
bool use_img = true;
bool use_camera = false;
int img(bool &use_img);
int camera(bool &use_camera);
Mat BaseImg = Mat::zeros(Size(960, 480), CV_8UC3);
ui.cpp
#include "ui.h"
using namespace cv;
using namespace std;
int main()
{
img(use_img);
camera(use_camera);
return 0;
}
int img(bool &use_img)
{
use_camera = false;
const int num = 500;
char img_name[50];
cv::namedWindow(WINDOW_NAME);
cvui::init(WINDOW_NAME);
int count = 1;
while (use_img)
{
cvui::window(BaseImg, 0, 0, 320, 480, "********************camera********************");
cvui::checkbox(BaseImg, 0, 25, "use_img", &use_img);
cvui::checkbox(BaseImg, 100, 25, "use_camera", &use_camera);
sprintf(img_name, "D:/workspace//Utils//Test/img//%d.jpg", count);
Mat img = imread(img_name);
resize(img, img, Size(640, 480));
Mat ROI = BaseImg(Rect(320, 0, 640, 480));
addWeighted(ROI, 0, img, 1, 0, ROI);
if (cvui::button(BaseImg, 255, 450, 60, 30, "latter"))
{
count++;
}
if (cvui::button(BaseImg, 5, 450, 60, 30, "previous"))
{
count--;
}
cvui::printf(BaseImg, 130, 460, 0.4, 0xff0000, "now is:%d", count);
if (img.empty())
{
cerr << "no img in file now" << endl;
destroyAllWindows();
break;
}
cvui::update();
cv::imshow(WINDOW_NAME, BaseImg);
cv::waitKey(10);
while (use_camera)
{
use_img = false;
use_camera = true;
camera(use_camera);
}
}
return 0;
}
int camera(bool &use_camera)
{
while (use_camera)
{
use_img = false;
VideoCapture cap(0);
bool open_camera = true;
while (open_camera)
{
cvui::window(BaseImg, 0, 0, 320, 480, "********************camera********************");
cvui::checkbox(BaseImg, 0, 25, "use_img", &use_img);
cvui::checkbox(BaseImg, 100, 25, "use_camera", &use_camera);
Mat frame;
cap >> frame;
resize(frame, frame, Size(640, 480));
Mat ROI = BaseImg(Rect(320, 0, 640, 480));
addWeighted(ROI, 0, frame, 1, 0, ROI);
cv::imshow(WINDOW_NAME, BaseImg);
cv::waitKey(30);
while (!use_camera)
{
open_camera = false;
use_img = true;
//use_camera为false的时候关闭camera
cap.release();
img(use_img);
}
}
}
return 0;
}
脸就不漏了。