图像识别——UVC预览+曝光滑动调节
Posted somebot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像识别——UVC预览+曝光滑动调节相关的知识,希望对你有一定的参考价值。
博主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。
以上是关于图像识别——UVC预览+曝光滑动调节的主要内容,如果未能解决你的问题,请参考以下文章