C语言ioctl调摄像头曝光的问题

pirongbing0020 2017-09-13 11:53:39
我是做在开发板上用实现摄像头识别二维码的项目。二维码移到较快所以要调低曝光值,但使用v4l2_control调节的曝光值好像不稳定,open函数打开摄像设备之后曝光不一定是正确的,然后这次开启摄像头曝光就一直不正确,图片明显偏亮,是函数问题(希望给个更好的C实现的方法)还是这个摄像头有问题(SY003淘宝买的100多块)。
这是我调曝光的方法。

int set_exposure(int cam_fd, int exp_value) {
struct v4l2_control ctrl;
struct v4l2_queryctrl setting;
int min, max, current, step, val_def;
if (isv4l2Control(cam_fd, V4L2_CID_EXPOSURE_ABSOLUTE, &setting) < 0)
return -1;
min = setting.minimum;
max = setting.maximum;
step = setting.step;
val_def = setting.default_value;
current = v4l2GetControl(cam_fd, V4L2_CID_EXPOSURE_ABSOLUTE);
printf("max %d, min %d, default %d, current %d \n", max, min, val_def,
current);
printf("start set exp\n");
int ret;
//设置曝光绝对值
ctrl.id = V4L2_CID_EXPOSURE_ABSOLUTE;
ctrl.value = exp_value;
ret = ioctl(cam_fd, VIDIOC_S_CTRL, &ctrl);
if (ret < 0) {
printf("Set exposure failed (%d)\n", ret);
return FALSE;
} else
printf("Control name:%s set to value:%d\n", setting.name, ctrl.value);
return TRUE;
}

这是我试的另一种方法,摄像头不支持

int ret;
struct v4l2_controlctrl;
ctrl.id = V4L2_CID_EXPOSURE; //得到曝光档次,A20接受从 -4到4 共9个档次
ret = ioctl(Handle, VIDIOC_G_CTRL,&ctrl);
if (ret < 0)
{ printf("Get exposure failed (%d)\n",ret);
returnV4L2_UTILS_GET_EXPSURE_ERR;
}

printf("\nGet Exposure :[%d]\n",ctrl.value);

//设置曝光档次
ctrl.id = V4L2_CID_EXPOSURE;
ctrl.value = -4;
ret = ioctl(Handle, VIDIOC_S_CTRL,&ctrl);
if (ret < 0) { printf("Set exposurefailed (%d)\n", ret);
return V4L2_UTILS_SET_EXPSURE_ERR;}
...全文
811 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
茜茜FXJ 2018-06-18
  • 打赏
  • 举报
回复
我也出现了这样的情况,后来就改成自动曝光了,然后对我的情况也可行。
茜茜FXJ 2018-06-18
  • 打赏
  • 举报
回复
我也出现了这样的情况,后来就改成自动曝光了,然后对我的情况也可行。
pirongbing0020 2017-11-04
  • 打赏
  • 举报
回复
无人回帖啊啊啊啊

2,425

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧