OpenCV CUDA模块直方图计算------在 GPU上执行直方图均衡化(Histogram Equalization)函数equalizeHist
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::cuda::equalizeHist 用于增强图像的对比度,通过将图像的灰度直方图重新分布,使得图像整体对比度更加明显。
这在医学图像、夜视图像、低对比度图像中特别有用。
函数原型
void cv::cuda::equalizeHist
(InputArray src,OutputArray dst,Stream & stream = Stream::Null()
)
参数
- src 源图像,类型为 CV_8UC1(即单通道、8位无符号整型图像)。
- dst 目标图像,与源图像具有相同的尺寸和类型。
- stream 用于异步执行的流(Stream),可实现与主机的异步操作。
代码示例
#include <iostream>
#include <opencv2/cudaimgproc.hpp> // 包含 equalizeHist 函数
#include <opencv2/opencv.hpp>int main()
{// 读取灰度图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cerr << "无法加载图像" << std::endl;return -1;}// 将图像上传到 GPUcv::cuda::GpuMat d_img, d_result;d_img.upload( img );// 在 GPU 上执行直方图均衡化cv::cuda::equalizeHist( d_img, d_result );// 下载结果到 CPUcv::Mat result;d_result.download( result );// 显示原始图像和处理后的图像cv::imshow( "Original Image", img );cv::imshow( "Equalized Image", result );cv::waitKey( 0 );return 0;
}