红外和可见光图像融合 c代码
时间: 2023-06-07 13:02:03 浏览: 200
红外和可见光图像融合是将红外图像和可见光图像融合成一张图像,以达到更好的图像效果。本文将介绍如何使用C语言来实现红外和可见光图像融合的代码。
首先,需要使用图像处理的库加载可见光和红外图像,可以使用OpenCV库。代码如下:
Mat infrared_img = cv::imread("infrared.jpg", IMREAD_GRAYSCALE);
Mat rgb_img = cv::imread("rgb.jpg", IMREAD_COLOR);
然后,需要分别对红外图像和可见光图像进行预处理,如直方图均衡化、高斯滤波和图像增强等操作。代码如下:
//红外图像预处理
cv::equalizeHist(infrared_img, infrared_img);
cv::GaussianBlur(infrared_img, infrared_img, Size(5,5), 0);
Mat infrared_enhanced_img;
cv::merge(vector<Mat>{infrared_img, infrared_img, infrared_img}, infrared_enhanced_img);
//可见光图像预处理
cv::equalizeHist(rgb_img, rgb_img);
cv::GaussianBlur(rgb_img, rgb_img, Size(5,5), 0);
Mat rgb_enhanced_img;
cv::merge(vector<Mat>{rgb_img, rgb_img, rgb_img}, rgb_enhanced_img);
接下来,需要使用权重加权平均的方法进行融合。一般来说,可见光图像的权重比红外图像的权重大,因为可见光图像保留了更多的物体结构信息。代码如下:
const double alpha = 0.8; //可见光图像的权重
const double beta = (1.0 - alpha); //红外图像的权重
Mat blended_img;
cv::addWeighted(rgb_enhanced_img, alpha, infrared_enhanced_img, beta, 0.0, blended_img);
最后,将融合后的图像保存到本地。完整代码如下所示:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char **argv)
{
//加载红外图像和可见光图像
Mat infrared_img = cv::imread("infrared.jpg", IMREAD_GRAYSCALE);
Mat rgb_img = cv::imread("rgb.jpg", IMREAD_COLOR);
//红外图像预处理
cv::equalizeHist(infrared_img, infrared_img);
cv::GaussianBlur(infrared_img, infrared_img, Size(5,5), 0);
Mat infrared_enhanced_img;
cv::merge(vector<Mat>{infrared_img, infrared_img, infrared_img}, infrared_enhanced_img);
//可见光图像预处理
cv::equalizeHist(rgb_img, rgb_img);
cv::GaussianBlur(rgb_img, rgb_img, Size(5,5), 0);
Mat rgb_enhanced_img;
cv::merge(vector<Mat>{rgb_img, rgb_img, rgb_img}, rgb_enhanced_img);
//融合图像
const double alpha = 0.8;
const double beta = (1.0 - alpha);
Mat blended_img;
cv::addWeighted(rgb_enhanced_img, alpha, infrared_enhanced_img, beta, 0.0, blended_img);
//保存融合后的图像
cv::imwrite("blended.jpg", blended_img);
return 0;
}
阅读全文