ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何用 OpenCV 消除水下图像散射与偏色:颜色校正完整实战指南

如何用 OpenCV 消除水下图像散射与偏色:颜色校正完整实战指南 如何用 OpenCV 消除水下图像散射与偏色颜色校正完整实战指南【免费下载链接】opencvOpen Source Computer Vision Library项目地址: https://gitcode.com/GitHub_Trending/opencv31/opencv一张偏蓝绿、蒙着层雾的水下照片走完这套 OpenCV 水下图像处理流程后色彩恢复鲜活画面里的细节重新浮出水面。整条路线只有四步HSV 饱和度通道调色、直方图均衡化拉开对比度、Canny 边缘检测圈出模糊区、inpaint 修复填平。原理一句话为什么水下照片又蓝又糊水把红光一路吸收掉留下的主要是蓝绿光所以画面偏冷色水里的悬浮颗粒把光线弹得到处都是对比度被压得很低细节就糊成了一片。四步走通颜色校正与散射消除流水线步骤一HSV 饱和度调校把颜色浓回来目标抵消水体吸光造成的颜色发灰发淡。核心是 cvtColor()一句话作用把图像从 BGR 搬进 HSV 空间让色相、饱和度、明度各管各的。操作代码Mat img imread(samples/data/fruits.jpg); Mat hsv; cvtColor(img, hsv, COLOR_BGR2HSV); vectorMat ch; split(hsv, ch); ch[1] 50; merge(ch, hsv); Mat out; cvtColor(hsv, out, COLOR_HSV2BGR);效果整张图的颜色浓度肉眼可见地浓了回来不再像隔着一层毛玻璃。偏移量 50 只是起点偏色重就加加过头会出现饱和溢出的亮斑。步骤二直方图均衡化一步拉平灰度分布目标让暗部提亮、亮部不炸。核心是 equalizeHist()一句话作用把挤在暗区的亮度整体摊开明暗分布重新拉匀实现源码见 modules/imgproc/src/histogram.cpp。建议先在灰度图上做确认亮度拉得开。效果原本沉在阴影里的纹理被整体顶出来画面通透一个档次。步骤三Canny 边缘检测一步定位散射区域目标把低对比、疑似被散射糊掉的区域框出来。三个函数接力GaussianBlur() 先用 5x5 高斯核压掉颗粒噪声避免把噪声点误判成边缘Canny() 用 50/150 双阈值提取边缘骨架findContours() 从边缘图里抠出外轮廓作为待修复区域的边界。效果屏幕上得到一堆白色轮廓圈住的正是下一步要动刀的位置。步骤四inpaint 智能填平抹掉模糊痕迹目标让圈出来的区域被周围真实像素渗进去而不是糊一块灰。核心是 inpaint()一句话作用按掩码把空洞填上半径 3、Telea 算法让纹理自然过渡。操作代码Mat mask Mat::zeros(img.size(), CV_8U); drawContours(mask, contours, -1, Scalar(255), -1); Mat res; inpaint(img, mask, res, 3, INPAINT_TELEA);效果被圈住的朦胧斑块消失背景纹理连续像没发生过一样。参数速查表参数建议范围偏大的后果偏小的后果饱和度偏移量30~80颜色过饱和出现亮斑偏色没退干净Canny 双阈值50/150噪声被当成边缘圈出杂区边缘断断续续区域漏圈inpaint 半径2~5涂抹感加重纹理被抹平填不满空洞留白边修复算法 Telea/NS默认 TeleaNS 速度快但易出重复纹理Telea 边界更自然速度稍慢下一步往哪走到这里偏色和模糊两条线都处理完了你对 OpenCV 的水下图像修复已经有了可复用的流水线。往下走三个方向用 createCLAHE() 做局部自适应均衡暗角提亮同时保住高光水雾颗粒太密时先跑 FastNlMeansDenoisingColored() 降噪再修复最后用 stitching 模块把多张修好的水下照片拼成全景。延伸阅读直方图均衡化教程doc/tutorials/imgproc/histograms/histogram_equalization/色彩空间转换实现modules/imgproc/src/color.cppinpaint 实现modules/photo/src/inpaint.cpp修复教程与效果示例doc/py_tutorials/py_photo/py_inpainting/测试图samples/data/fruits.jpg【免费下载链接】opencvOpen Source Computer Vision Library项目地址: https://gitcode.com/GitHub_Trending/opencv31/opencv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表