opencv:进行夜视
opencv: performing night vision
本文关键字:opencv 更新时间:2023-10-16
首先,我不是在谈论真正的夜视。我说的是在光线条件较差时用于提高图片亮度/光线的技术。你可以在智能手机上完美地看到这项技术,在平板电脑上也非常出色。我知道这里使用的技术,获得现有的光线,并用它来使图片清晰。但是如何在opencv中做到这一点呢?有什么方法或循序渐进的过程吗?
本质上有两种方法可以使您的图像变亮:
- 在相机中获取更多光子
- 给每个光子更多的"重量"
对于方法1,假设你无法控制照明,那么获得更多光子的唯一方法就是让你的传感器暴露更长的时间。假设您可以更改相机的积分时间。这种方法的缺点是可以获得更多的运动模糊。
对于方法2,这相当于对输入图像应用乘法增益,这使得每个光子对所得图像贡献更多DN。然而,应用这样的增益假设你有关于输入图像亮度的先验信息。如果你的增益值不好,你会得到饱和或太暗的图像。
要自动改善您的图像,最好的方法是使用OpenCV的equalizeHist函数,如下所述。该运算并不完全是乘法增益,但效果相似。
最后一步是,正如之前在评论中所建议的那样,应用此处所述的伽马校正。Gamma校正往往会降低图像的对比度,但由于您使用直方图均衡来提高对比度,因此应该会获得良好的结果。
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
namedWindow("input");
namedWindow("output");
Mat in = imread("yourDarkImage.jpg");;
Mat out;
if(in.empty())exit(1);
//equalize histograms per channel
vector<Mat> colors;
split(in, colors);
equalizeHist(colors[0], colors[0]);
equalizeHist(colors[1], colors[1]);
equalizeHist(colors[2], colors[2]);
merge(colors, out);
imshow("input", in);
imshow("output", out);
waitKey(0);
return 0;
}
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- OpenCV C++.快速计算混淆矩阵
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 哪些库可以通过Opencv调整曝光率
- 安装opencv失败-粘贴CMakeError.log的内容
- C++中的openCV Mat访问冲突
- OpenCV Android C++ imwrite not found
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 使用OpenCV和覆盆子上的多个网络摄像头拍摄延时摄影,出现多个V4L错误
- 如何使用OpenCV-C++编写*.mp4视频?
- Mingw-64 在构建和安装后不会编译 openCV 代码