彩色图像和灰色图像在一个窗口下显示

2024-06-22 09:48

本文主要是介绍彩色图像和灰色图像在一个窗口下显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面写了多张彩色图像或者多张单通道图像在一个窗口下显示,有时候需要彩色图像和黑白图像同事显示,方便对比。

以下即彩色图像和灰色图像在一个窗口下显示的代码:

现在在做项目是芯片检测。

#include <opencv2/opencv.hpp>

#include <highgui.h>

#include <cv.h>

#include <cxcore.h>

#include <iostream> 

#include <cv.h>  

#include <highgui.h>  

#include <stdio.h>  

#include <stdarg.h>  

#include <time.h>  

//========函数CombineImage(): 3通道和单通道图像合并  ======

IplImage *CombineImage(IplImage *rgbImg, IplImage *greyImg)  

{  

    if (rgbImg == NULL || greyImg == NULL)  

        return NULL;  

  

    int width = rgbImg->width;  

    int height = rgbImg->height;  

  

    IplImage *combImg = cvCreateImage(cvSize(width * 2, height), 8, 3);  

    IplImage *cvtImg = cvCreateImage(cvSize(width, height), 8, 3);  

    cvCvtColor(greyImg, cvtImg, CV_GRAY2BGR);  

  

    for (int row = 0; row < combImg->height; row++)  

    {  

        for (int col = 0; col < combImg->width; col++)  

        {  

            if (col < width)  

            {  

                CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col);  

                CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 1) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col + 1);  

                CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 2) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col+ 2);  

            }  

            else  

            {  

                CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col-width));  

                CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 1) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col - width) + 1);  

                CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 2) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col - width) + 2);  

            }  

        }  

    }  

    cvReleaseImage(&cvtImg);  

    return combImg;  

//================================== 主函数 =======================================

int main(int argc,char** argv)

{

//加载原始彩色图片

IplImage* src_image = cvLoadImage("F:\\image\\贴片.jpg",

CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);

if (src_image == NULL)  return -1;


//平滑

IplImage* smooth_image = cvCreateImage(cvGetSize(src_image),IPL_DEPTH_8U,3);

cvSmooth(src_image,smooth_image,CV_MEDIAN /*CV_GAUSSIAN CV_BILATERAL*/,5,5,0,0);//CV_MEDIAN  CV_BILATERAL

//灰度化

IplImage* gray_image = cvCreateImage(cvGetSize(smooth_image),IPL_DEPTH_8U,1);

cvCvtColor(smooth_image,gray_image,CV_RGB2GRAY);

 //二值化转化成黑白图像

IplImage* canny_image = cvCreateImage(cvGetSize(gray_image),IPL_DEPTH_8U,1);

cvThreshold(gray_image,canny_image, 140, 255, CV_THRESH_BINARY);

//一张3通道和一张单通道图像合并

IplImage *combImg = CombineImage(src_image,canny_image); //图像合并函数


cvNamedWindow("CombineImage",1); 

cvResizeWindow("CombineImage",700,660);

cvShowImage( "CombineImage", combImg);  


cvWaitKey();  

cvReleaseImage(&combImg);   

        cvDestroyWindow("CombineImage");

cvReleaseImage(&filter_image);   

return 0;

}


//左侧是原彩色图,右边是二值化后的图像:


运行图片



这篇关于彩色图像和灰色图像在一个窗口下显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083942

相关文章

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(