opencv 窗口显示图像,通过键盘控制 调曝光&保存

问题描述: 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;
}


输出:
这里写图片描述
这里写图片描述
保存的图像:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值