问题描述: OpenCV 窗口界面显示相机采集的图像;带有键盘控制,调节曝光和保存图像。
1. OpenCV - 响应键盘事件
键盘不像鼠标那样,键盘是没有句柄的。因此,可通过等待键盘输入来键盘事件:
方式1: 不锁定键盘
int key = cvWaitKey(10);//等待10秒
方式2: 锁定键盘
int key = cvWaitKey(0); //不明确等待时间
参考网址:
opencv的鼠标以及键值使用
用函数fopen_s打开数据文件
fseek()用法 设定文件的当前读写位置
2. 代码
#include <iostream>
#include <ctype.h>
#include <cvInclude.h>
//修改waqExpoConfig.txt文件的曝光值
int writeExpo(int &expo, char *filename)
{
//打开waqExpoConfig.txt文件
FILE *fp;
if ((fopen_s(&fp, filename, "rb+")) != 0)
{
printf("can not open the file\n");
exit(0);//终止程序
}
//修改waqExpoConfig.txt文件内容(曝光值)
//设定文件的当前读写位置:fp指向的位置是从文件开始后移0个字节
fseek(fp, 0, SEEK_SET);
//写文件:从fp指针指向的位置开始,写入:"ExpoVal : [%d]", expo
fprintf_s(fp, "ExpoVal : [%d]", expo);
//关闭waqExpoConfig.txt文件
fclose(fp);
//打印expo值
printf("ExpoVal : [%d]\n", expo);
return 0;
}
//显示文件并通过键盘控制 曝光值的改变 保存图像
int showImg(Mat &tempImg)
{
char* window = "img";
namedWindow(window, CV_WINDOW_AUTOSIZE);
imshow(window, tempImg);//显示图像
Mat saveImg = tempImg.clone();
//设置waqExpoConfig.txt文件夹的位置和初始expo
int expo = 10000;
char filename[100] = "F:\\opencv 窗口显示图像,增加调光&保存按钮\\test2\\test2\\Config\\waqExpoConfig.txt";
writeExpo(expo, filename);
while (true)
{
char key = cvWaitKey(10);
switch (key)
{
case 'u'://Up
expo += 10000;
writeExpo(expo, filename);
break;
case 'd'://Down
expo -= 10000;
writeExpo(expo, filename);
break;
case 's'://点击s,保存图片
imwrite("F:/ROI.jpg", saveImg);
break;
};
if (key == 27) //Escape
break;
}
return 0;
}
int main(void)
{
Mat tempImg = imread("F:/test_photo/3.bmp", 1);
showImg(tempImg);
system("pause");
return 0;
}
输出:
保存的图像: