当前位置: 首页> 财经> 股票 > [16] 使用Opencv_CUDA 实现访问图像像素、直方图均衡化、几何变换

[16] 使用Opencv_CUDA 实现访问图像像素、直方图均衡化、几何变换

时间:2025/7/11 21:26:02来源:https://blog.csdn.net/yohnyang/article/details/139814061 浏览次数:0次

使用Opencv_CUDA 实现访问图像像素、直方图均衡化、几何变换

  • 访问图像的各个像素强度
  • 直方图的计算与均衡
  • 几何变换:缩放、平移与旋转

1. 访问图像的各个像素强度

#include <iostream>
#include "opencv2/opencv.hpp"int main()
{cv::Mat h_img1 = cv::imread("images/cameraman.tif", 0);cv::Scalar intensity = h_img1.at<uchar>(cv::Point(100, 50));std::cout << "Pixel Intensity of gray scale Image at (100,50) is:" << intensity.val[0] << std::endl;cv::Mat h_img2 = cv::imread("images/autumn.tif", 1);cv::Vec3b intensity1 = h_img2.at<cv::Vec3b>(cv::Point(100, 50));std::cout << "Pixel Intensity of color Image at (100,50) is:" << intensity1 << std::endl;return 0;
}

在这里插入图片描述

2. 直方图计算与均衡

  • 直方图时图像的一个非常重要的属性,提供了图像外观的全局描述
  • 通常直方图均匀分布,可以得到较好的视觉效果
  • 对灰度图实现均衡化:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<cudaimgproc.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/cameraman.tif", 0);cv::cuda::GpuMat d_img1, d_result1;d_img1.upload(h_img1);cv::cuda::equalizeHist(d_img1, d_result1);cv::Mat h_result1;d_result1.download(h_result1);cv::imshow("Original Image ", h_img1);cv::imshow("Histogram Equalized Image", h_result1);cv::imwrite("images/result_inversion.png", h_img1);cv::imwrite("images/result_inversion.png", h_result1);cv::waitKey();return 0;
}

在这里插入图片描述

  • 对三通道彩色图实现均衡化:
#include <iostream>
#include "opencv2/opencv.hpp"int main()
{cv::Mat h_img1 = cv::imread("images/autumn.tif");cv::Mat h_img2, h_result1;cvtColor(h_img1, h_img2, cv::COLOR_BGR2HSV);//Split the image into 3 channels; H, S and V channels respectively and store it in a std::vectorstd::vector< cv::Mat > vec_channels;cv::split(h_img2, vec_channels);//Equalize the histogram of only the V channel cv::equalizeHist(vec_channels[2], vec_channels[2]);//Merge 3 channels in the vector to form the color image in HSV color space.cv::merge(vec_channels, h_img2);//Convert the histogram equalized image from HSV to BGR color space againcv::cvtColor(h_img2, h_result1, cv::COLOR_HSV2BGR);cv::imshow("Original Image ", h_img1);cv::imshow("Histogram Equalized Image", h_result1);cv::waitKey();return 0;
}

在这里插入图片描述

3. 几何变换

  • 图像缩放:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudawarping.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/cameraman.tif", 0);cv::cuda::GpuMat d_img1, d_result1, d_result2;d_img1.upload(h_img1);int width = d_img1.cols;int height = d_img1.size().height;cv::cuda::resize(d_img1, d_result1, cv::Size(200, 200), cv::INTER_CUBIC);cv::cuda::resize(d_img1, d_result2, cv::Size(0.5 * width, 0.5 * height), cv::INTER_LINEAR);cv::Mat h_result1, h_result2;d_result1.download(h_result1);d_result2.download(h_result2);cv::imshow("Original Image ", h_img1);cv::imshow("Resized Image", h_result1);cv::imshow("Resized Image 2", h_result2);cv::imwrite("Resized1.png", h_result1);cv::imwrite("Resized2.png", h_result2);cv::waitKey();return 0;
}

在这里插入图片描述

  • 图像平移与旋转
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudawarping.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/cameraman.tif", 0);cv::cuda::GpuMat d_img1, d_result1, d_result2;d_img1.upload(h_img1);int cols = d_img1.cols;int rows = d_img1.size().height;//Translationcv::Mat trans_mat = (cv::Mat_<double>(2, 3) << 1, 0, 70, 0, 1, 50);cv::cuda::warpAffine(d_img1, d_result1, trans_mat, d_img1.size());//Rotationcv::Point2f pt(d_img1.cols / 2., d_img1.rows / 2.);cv::Mat r = cv::getRotationMatrix2D(pt, 45, 1.0);cv::cuda::warpAffine(d_img1, d_result2, r, cv::Size(d_img1.cols, d_img1.rows));cv::Mat h_result1, h_result2;d_result1.download(h_result1);d_result2.download(h_result2);cv::imshow("Original Image ", h_img1);cv::imshow("Translated Image", h_result1);cv::imshow("Rotated Image", h_result2);cv::imwrite("Translated.png", h_result1);cv::imwrite("Rotated.png", h_result2);cv::waitKey();return 0;
}

在这里插入图片描述

关键字:[16] 使用Opencv_CUDA 实现访问图像像素、直方图均衡化、几何变换

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: