• 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述

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

    #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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    在这里插入图片描述

    在分离的通道中的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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    在这里插入图片描述

  • 相关阅读:
    详解UDS CAN诊断:DiagnosticSessionControl Service(SID:0X10)
    css3实现页面元素抖动效果
    【Git】02-Git常见应用
    【Springer出版社】机器学习、遥感、信号处理类SCI&EI,2-3个月左右录用
    209. 长度最小的子数组
    Flink面试(2)
    万字逐行解析与实现Transformer,并进行德译英实战(二)
    HTTPS流量抓包分析中出现无法加载key
    关于如何编写好金融科技客户端SDK的思考
    基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结
  • 原文地址:https://blog.csdn.net/qq_46107892/article/details/133647482