news 2026/6/20 16:35:47

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/6/15 15:50:03

如何在3小时内完成智谱Open-AutoGLM部署?一线架构师亲授加速秘技

第一章&#xff1a;智谱Open-AutoGLM部署的核心挑战在将智谱AI推出的Open-AutoGLM模型投入实际生产环境时&#xff0c;开发者常面临一系列技术性难题。这些挑战不仅涉及计算资源的合理配置&#xff0c;还包括依赖管理、服务化封装以及性能调优等多个层面。硬件资源需求高 Open-…

作者头像 李华
网站建设 2026/6/15 20:10:39

Open-AutoGLM ollama性能调优全攻略,打造极致低延迟推理系统

第一章&#xff1a;Open-AutoGLM ollama性能调优全攻略&#xff0c;打造极致低延迟推理系统在部署 Open-AutoGLM 模型至 ollama 推理框架时&#xff0c;实现低延迟、高吞吐的推理服务是核心目标。通过合理配置硬件资源、优化模型加载策略以及调整运行时参数&#xff0c;可显著提…

作者头像 李华
网站建设 2026/6/10 7:52:24

阿里云+智普Open-AutoGLM部署实录(万字长文揭秘企业级AI落地细节)

第一章&#xff1a;阿里云智普Open-AutoGLM部署背景与意义随着大模型技术的快速发展&#xff0c;企业对高效、可扩展的自动化机器学习平台需求日益增长。阿里云作为国内领先的云计算服务提供商&#xff0c;具备强大的计算资源调度与AI基础设施支持能力。结合智普AI推出的开源项…

作者头像 李华
网站建设 2026/6/16 21:28:53

为什么顶级团队都在关注Open-AutoGLM?揭秘其架构设计的三大黑科技

第一章&#xff1a;为什么顶级团队都在关注Open-AutoGLM&#xff1f;在人工智能快速演进的当下&#xff0c;大语言模型&#xff08;LLM&#xff09;自动化能力成为技术竞争的新高地。Open-AutoGLM 作为开源社区中首个聚焦“自主目标驱动”的智能体框架&#xff0c;正吸引着全球…

作者头像 李华