news 2026/2/3 1:28:30

OpenCV去雾:Dark Channel Prior(暗通道)算法代码,不能用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenCV去雾:Dark Channel Prior(暗通道)算法代码,不能用

这个代码完全不能用。得到的画面是黑乎乎的。

我也搞不明白,这样的东西也好意思放出来。

  • 代码
#include <opencv2/opencv.hpp> #include <opencv2/ximgproc.hpp> using namespace std; using namespace cv; cv::Mat computeDarkChannel(const cv::Mat& src, int patchSize = 15) { CV_Assert(src.type() == CV_8UC3); cv::Mat dark = cv::Mat::zeros(src.size(), CV_8UC1); int radius = patchSize / 2; // 边界扩展:采用镜像填充避免边缘畸变 cv::Mat padded; cv::copyMakeBorder(src, padded, radius, radius, radius, radius, cv::BORDER_REFLECT); for (int i = 0; i < src.rows; ++i) { for (int j = 0; j < src.cols; ++j) { uchar minVal = 255; for (int di = 0; di < patchSize; ++di) { for (int dj = 0; dj < patchSize; ++dj) { const cv::Vec3b& pixel = padded.at<cv::Vec3b>(i + di, j + dj); uchar tempMin = std::min({pixel[0], pixel[1], pixel[2]}); minVal = std::min(minVal, tempMin); } } dark.at<uchar>(i, j) = minVal; } } return dark; } cv::Mat refineTransmission(const cv::Mat& transmission, const cv::Mat& guide, int r = 60, double eps = 1e-3) { cv::Mat refined; cv::ximgproc::guidedFilter(guide, transmission, refined, r, eps); return refined; } cv::Mat dehazeImage(const cv::Mat& hazy, int patchSize = 15, double omega = 0.95, double t0 = 0.1) { cv::Mat darkChannel = computeDarkChannel(hazy, patchSize); cv::Scalar meanIntensity = cv::mean(hazy)[0]; double A = *std::max_element(darkChannel.begin<uchar>(), darkChannel.end<uchar>()) * 255.0 / 255.0; cv::Mat trans = 1.0 - omega * (darkChannel / (double)A); trans = refineTransmission(trans, hazy, 60, 1e-3); cv::threshold(trans, trans, t0, t0, cv::THRESH_TOZERO); cv::Mat result = cv::Mat::zeros(hazy.size(), hazy.type()); for (int i = 0; i < hazy.rows; ++i) { for (int j = 0; j < hazy.cols; ++j) { cv::Vec3f pixel = hazy.at<cv::Vec3b>(i, j); float t = trans.at<uchar>(i, j) / 255.0f; t = std::max(t, (float)t0); for (int c = 0; c < 3; ++c) { result.at<cv::Vec3b>(i, j)[c] = cv::saturate_cast<uchar>((pixel[c] - A) / std::max(t, 0.01f) + A); } } } return result; } int main(int argc, char** argv) { cv::Mat image = cv::imread("fog.png"); if (image.empty()) { std::cerr << "Error: Could not load image." << std::endl; return -1; } cv::imshow("Hazy Input", image); cv::Mat defog = dehazeImage(image); cv::imshow("defog", defog); cv::waitKey(0); }
  • 脚本
OPENCV_INCLUDE=/usr/include/opencv4 # OPENCV_LIB=/usr/local/lib OPENCV_LIB=/usr/lib/x86_64-linux-gnu EXE_FILE=defog CODE_FILE=defog1.cpp rm ${EXE_FILE} reset g++ \ -Wl,-rpath=.:${OPENCV_LIB} \ ${CODE_FILE} \ -o ${EXE_FILE} \ -I${OPENCV_INCLUDE} \ -L${OPENCV_LIB} \ -lopencv_core -lopencv_highgui \ -lopencv_features2d -lopencv_imgproc \ -lopencv_videoio -lopencv_videostab \ -lopencv_optflow -lopencv_tracking \ -lopencv_video -lopencv_bgsegm \ -lopencv_calib3d -lopencv_ximgproc \ -lopencv_imgcodecs # `pkg-config --cflags --libs opencv4` ./${EXE_FILE} fog.png
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 20:09:01

变压器的智能绕线功能系统

2 系统设计方案的比较 2.1控制器的方案论证与选择 方案一&#xff1a;采用可编程逻辑器件CPLD作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式&#xff0c;提高了系统的处理速度&#x…

作者头像 李华
网站建设 2026/2/3 8:52:46

计算机毕业设计springboot基于JAVA的摄影交流系统 基于Spring Boot的Java摄影社区管理系统设计与实现 Java环境下Spring Boot驱动的摄影交流平台开发

计算机毕业设计springboot基于JAVA的摄影交流系统s3oi79&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着科技的飞速发展&#xff0c;摄影爱好者群体不断壮大&#xff0c;他们…

作者头像 李华
网站建设 2026/2/2 21:02:06

凯云--便携式响应时间测试仪ETest_Time

1&#xff09;产品简介便携式响应时间测试仪用于系统响应时间的自动化验证&#xff0c;可自动记录从测试驱动信号触发到系统输出信号产生的时间差&#xff0c;即系统响应时间&#xff0c;可自动重复&#xff0c;多次执行个测试项并可自动绘制响应曲线&#xff0c;以及测试置信度…

作者头像 李华
网站建设 2026/2/2 5:12:19

【Open-AutoGLM应用场景揭秘】:5大行业落地案例深度解析

第一章&#xff1a;Open-AutoGLM应用场景概述Open-AutoGLM 是一个面向通用语言模型自动化任务的开源框架&#xff0c;专为简化自然语言处理&#xff08;NLP&#xff09;流程而设计。它支持从数据预处理、模型微调到推理部署的一体化操作&#xff0c;适用于多种实际业务场景。智…

作者头像 李华
网站建设 2026/2/3 9:06:58

Java 扫雷小游戏:从源代码到玩法解析,小白做游戏,收藏这篇就够了

引言 Java扫雷小游戏是一种经典的单人益智游戏&#xff0c;通过挖掘地雷以外的方块&#xff0c;以找到地雷并保持自己的生命。本文将详细介绍Java编写的扫雷小游戏源代码&#xff0c;深入讲解实现过程、代码结构和游戏玩法。 1. 扫雷游戏的基本规则 在开始编写源代码之前&a…

作者头像 李华
网站建设 2026/2/3 1:28:36

为什么你的Mac跑不动Open-AutoGLM?这3个关键配置90%的人都忽略了

第一章&#xff1a;为什么你的Mac跑不动Open-AutoGLM&#xff1f;这3个关键配置90%的人都忽略了许多开发者在尝试本地运行 Open-AutoGLM 时&#xff0c;发现即使搭载 M1/M2 芯片的 Mac 也会出现卡顿、崩溃或无法启动的情况。问题往往不在于模型本身&#xff0c;而在于系统底层的…

作者头像 李华