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;
}

 

脸就不漏了。 

 一个问题:

cvui好像有一个的问题就是当我鼠标悬停button或者checkbox上的时候,会出现和按下去同样的效果,但是在这两个上面没有出现,当我使用滤镜效果处理的时候就会出现这个问题,不知道是不是我自己的代码问题。

更新:

悬停的时候不会出现问题了,具体是我的cvui::update()位置放错了,导致鼠标悬停在checkbox上的时候视频帧会闪烁,放对位置就好了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值