在OpenCV中标准化相机输入?(对比度/饱和度/亮度等)
我正在用OpenCV开发一个应用程序,这个程序会使用网络摄像头并运行一些视觉算法。等我完成后,我想把这个应用放到网上,但我有点担心每台电脑的摄像头设置差别很大,如果设置和我的差别太大,算法可能会出问题。
有没有办法在捕捉到画面后,对它进行后处理,确保对比度是X,亮度是Y,饱和度是Z?我觉得现在的OpenCV Python接口不能直接通过代码来改变摄像头的设置。
有没有人能告诉我,如何从图像中计算这些参数,并使用OpenCV适当地调整它们?
2 个回答
2
我也遇到了类似的问题。这段代码可以去掉图片中的所有亮度信息,这样在光线变化很大的情况下,图片可能会更稳定。当然,你也可以调整其他参数来适应你的需求:
// img is an rgb image
cvCvtColor(img, img, CV_RGB2HSV);
for( int y=0; y<img->height; y++ ) {
uchar* ptr = (uchar*) (
img->imageData + y * img->widthStep
);
for( int x=0; x<img->width; x++ ) {
ptr[3*x+2] = 255; // maxes the value,
// use +1 for saturation, +0 for hue
}
}
// convert back for displaying
cvCvtColor(img, img, CV_HSV2RGB);
3
在openCV中,你可以用几种方法来处理你的图片。
如果想调整对比度,可以使用 equalizeHist 这个函数。
要调整亮度和饱和度,首先需要把图片转换成HSV颜色空间,这可以通过 cvtColor 来实现。然后,你可以直接访问每个像素,修改饱和度和亮度(值)到合适的数值。