news 2026/6/9 21:28:07

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/10 14:10:12

基于51单片机的停车场车位管理系统

第2节 方案设计及选择 该系统用于检测是否有车辆进出&#xff0c;是否有空余车位&#xff0c;应用单片机来控制其他模块以实现对车辆的数目、状态等的加减计数和状态显示&#xff0c;并利用单片机中的定时系统对车辆进出的时间限制以及设定&#xff0c;键盘系统的输入可以人工控…

作者头像 李华
网站建设 2026/6/10 12:31:32

深入理解RAG索引:构建高效大模型检索系统的核心

RAG索引是将知识转化为可搜索数值数据的过程&#xff0c;是检索增强生成的关键基础。文章详解了六种索引策略&#xff1a;块索引、子块索引、查询索引、摘要索引、分层索引和混合索引&#xff0c;每种策略适用于不同场景和数据类型。成功的RAG系统需选择适当的索引策略&#xf…

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

3天玩转Open-AutoGLM智能体电脑,你必须知道的10个关键步骤

第一章&#xff1a;Open-AutoGLM智能体电脑的核心功能解析Open-AutoGLM智能体电脑是一款基于大语言模型与自动化执行引擎深度融合的智能计算平台&#xff0c;旨在实现自然语言指令到具体操作行为的端到端转化。其核心能力不仅体现在语义理解的深度上&#xff0c;更在于对操作系…

作者头像 李华
网站建设 2026/6/9 21:29:24

计算机毕业设计springboot基于Java的电脑DIY微信小程序 基于Spring Boot框架的Java语言电脑DIY微信小程序设计与实现 Java技术驱动的Spring Boot电脑DIY微信

计算机毕业设计springboot基于Java的电脑DIY微信小程序4273g9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着互联网技术的飞速发展&#xff0c;人们的生活方式发生了翻天覆…

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

E3174-T0001矢量控制器

E3174-T0001 矢量控制器是一款高性能工业控制设备&#xff0c;主要用于对电机进行精准控制&#xff0c;特别是在需要调速和转矩控制的场景。它的产品应用领域可以概括如下&#xff1a;E3174-T0001 矢量控制器 — 产品应用领域工业自动化设备机械手臂、装配线、包装机械等对运动…

作者头像 李华
网站建设 2026/6/10 14:07:32

HGD-3000温度探测器

HGD-3000 温度探测器是一种工业级传感器&#xff0c;用于高精度温度监测和控制。它通常具有快速响应、稳定可靠的特点&#xff0c;适用于多种工业环境。以下是详细介绍&#xff1a;HGD-3000 温度探测器 — 产品特点与应用领域产品特点&#xff1a;高精度测温&#xff1a;可实现…

作者头像 李华