图像识别(9)——UVC预览+曝光滑动调节

openCV 同时被 2 个专栏收录
32 篇文章 0 订阅
15 篇文章 1 订阅

博主QQ:1356438802

QQ群:473383394——UVC&OpenCV473383394


平台:Win7 64bits + Visual Studio 2012 + OpenCV 2.4.10


将上一文中的程序再改进,增加滑动条调节曝光值。

//--------------------------------------【程序说明】-------------------------------------------
//		程序说明:《OpenCV3编程入门》OpenCV2版书本配套示例程序07
//		程序描述:使用VideoCapture类调用摄像头读入视频并显示
//		开发测试所用操作系统: Windows 7 64bit
//		开发测试所用IDE版本:Visual Studio 2010
//		开发测试所用OpenCV版本:	2.4.9
//		2014年03月 Created by @浅墨_毛星云
//		2014年11月 Revised by @浅墨_毛星云
//------------------------------------------------------------------------------------------------
//---------------------------------【头文件、命名空间包含部分】----------------------------
//		描述:包含程序所使用的头文件和命名空间
//-------------------------------------------------------------------------------------------------
#include <opencv2\opencv.hpp>  
using namespace cv;  
using namespace std;
#define TRACK_BAR
//【1】从摄像头读入视频
VideoCapture capture;
Mat frame;  //定义一个Mat变量,用于存储每一帧的图像
double time0;
int exposure = -1;
#ifdef TRACK_BAR
//滑动条回调函数
void onChange(int pos, void* userdata);
#endif
//-----------------------------------【main( )函数】--------------------------------------------
//		描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main( )  
{  
	frame = imread("1.jpg");
	imshow("读取UVC",frame);  //显示当前帧
	waitKey(2000);
	capture.open(0);
	if(false == capture.isOpened())
	{
		return -1;
	}
	exposure = capture.get(CV_CAP_PROP_EXPOSURE);
	//显示曝光值
	cout << ">设置前: 曝光值= " << exposure << endl;
	//设置曝光值
	capture.set(CV_CAP_PROP_EXPOSURE, exposure);
	exposure = capture.get(CV_CAP_PROP_EXPOSURE);
	//显示曝光值
	cout << ">设置后: 曝光值= " << exposure << endl;
	double width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
	double height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
	//显示尺寸
	cout << ">宽:= " << width << ";  高: =" << height << endl;
#ifdef TRACK_BAR
	exposure = 50 - exposure;
	createTrackbar("曝光值", "读取UVC", &exposure, 100, onChange, NULL);
#endif
	//【2】循环显示每一帧
	while(1)  
	{  
		
		time0 = static_cast<double>(getTickCount( ));//记录起始时间
		capture >> frame;  //读取当前帧
		//若视频播放完成,退出循环
		if (frame.empty())
		{
			break;
		}
		imshow("读取UVC",frame);  //显示当前帧
		//显示帧率
		//cout << ">帧率= " << getTickFrequency() / (getTickCount() - time0) << endl;
		char c = (char)waitKey(10);
		if( c == 27 )
			break;
	}  
	return 0;     
}  
#ifdef TRACK_BAR
void onChange(int pos, void* userdata)
{
	exposure = 50 - exposure;	
	//设置曝光值
	capture.set(CV_CAP_PROP_EXPOSURE, exposure);
}
#endif


程序中有个地方需要说明下:

1. 滑动条的值只能是正整数。

2. 好像我这个USB摄像头曝光值范围是0至-12

所以代码中会出现exposure = 50 - exposure这样诡异的写法,最终滑动条的有效滑动范围是50-62。







  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值