c++视觉--通道分离,合并处理,在分离的通道中的ROI感兴趣区域里添加logo图片

c++视觉–通道分离,合并处理

通道分离: split()函数

#include 

int main() {
	// 读取图像
	cv::Mat image = cv::imread("1.jpg");

	// 检查图像是否成功加载
	if (image.empty()) {
		std::cerr << "Error: Could not read the image." << std::endl;
		return -1;
	}

	// 分离通道
	std::vector<cv::Mat> channels;
	cv::split(image, channels);

	// channels[0] 是蓝色通道
	// channels[1] 是绿色通道
	// channels[2] 是红色通道

	// 显示原始图像和分离的通道
	cv::imshow("Original Image", image);
	cv::imshow("蓝色 Channel", channels[0]);
	cv::imshow("绿色 Channel", channels[1]);
	cv::imshow("红色 Channel", channels[2]);

	// 等待按键
	cv::waitKey(0);

	return 0;
}

再将拆开后的单通道进行对比度处理后进行合并

#include 

int main() {
	// 读取图像
	cv::Mat image = cv::imread("1.jpg");

	// 检查图像是否成功加载
	if (image.empty()) {
		std::cerr << "Error: Could not read the image." << std::endl;
		return -1;
	}

	// 分离通道
	std::vector<cv::Mat> channels;
	cv::split(image, channels);

	// channels[0] 是蓝色通道
	// channels[1] 是绿色通道
	// channels[2] 是红色通道

	// 显示原始图像和分离的通道
	cv::imshow("Original Image", image);
	cv::imshow("蓝色 Channel", channels[0]);
	cv::imshow("绿色 Channel", channels[1]);
	cv::imshow("红色 Channel", channels[2]);


	for (cv::Mat& channel : channels) {
		// 在这里可以对每个通道进行你想要的处理
		cv::equalizeHist(channel, channel);
	}

	cv::imshow("Original Image", image);
	cv::imshow("蓝色对比度增加 Channel", channels[0]);
	cv::imshow("绿色对比度增加 Channel", channels[1]);
	cv::imshow("红色对比度增加 Channel", channels[2]);

	// 合并通道
	cv::Mat processedImage;
	cv::merge(channels, processedImage);

	// 显示原始图像和处理后的图像
	cv::imshow("合并 Image", processedImage);

	// 等待按键
	cv::waitKey(0);

	return 0;
}

在分离的通道中的ROI感兴趣区域里添加logo图片

#include 

int main() {
	// 读取图像
	cv::Mat image = cv::imread("1.jpg");
	cv::Mat logo = cv::imread("4.jpg",0);
	// 检查图像是否成功加载
	if (image.empty()) {
		std::cerr << "Error: Could not read the image." << std::endl;
		return -1;
	}
	


	// 分离通道
	std::vector<cv::Mat> channels;
	cv::split(image, channels);

	// channels[0] 是蓝色通道
	// channels[1] 是绿色通道
	// channels[2] 是红色通道

	// 显示原始图像和分离的通道
	cv::imshow("Original Image", image);
	cv::imshow("蓝色 Channel", channels[0]);
	cv::imshow("绿色 Channel", channels[1]);
	cv::imshow("红色 Channel", channels[2]);


	for (cv::Mat& channel : channels) {
		// 在这里可以对每个通道进行你想要的处理
		cv::equalizeHist(channel, channel);
	}

	cv::imshow("Original Image", image);
	cv::imshow("蓝色对比度增加 Channel", channels[0]);
	cv::imshow("绿色对比度增加 Channel", channels[1]);
	cv::imshow("红色对比度增加 Channel", channels[2]);

	//在分离的通道中的ROI感兴趣区域里添加logo图片
	cv::Rect roiRect(100, 250, logo.cols, logo.rows);

	// 提取感兴趣区域(ROI)
	cv::Mat imageROI = channels[0](roiRect);


	// 将logo复制到感兴趣区域
	logo.copyTo(imageROI);
	cv::imshow("蓝色对比度增加logo区域 Channel", channels[0]);



	// 合并通道
	cv::Mat processedImage;
	cv::merge(channels, processedImage);

	// 显示原始图像和处理后的图像
	cv::imshow("合并 Image", processedImage);

	// 等待按键
	cv::waitKey(0);

	return 0;
}

你可能感兴趣的:(#,C++视觉处理,c++,opencv,计算机视觉)