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

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

相关文章

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

据阿谱尔APO Research调研显示,2023年全球髓内钉市场销售额约为4.7亿美元

根据阿谱尔 (APO Research)的统计及预测,2023年全球髓内钉市场销售额约为4.7亿美元,预计在2024-2030年预测期内将以超过3.82%的CAGR(年复合增长率)增长。 髓内钉市场是指涉及髓内钉制造、分销和销售的行业。髓内钉是一种用于整形外科手术的医疗器械,用于稳定长骨骨折,特别是股骨、胫骨和肱骨。髓内钉通常由不銹钢或钛等材料制成,并插入骨的髓管中,以在愈合过程中提供结构支

vue+elementUI下拉框联动显示

<el-row><el-col :span="12"><el-form-item label="主账号:" prop="partyAccountId" :rules="[ { required: true, message: '主账号不能为空'}]"><el-select v-model="detailForm.partyAccountId" filterable placeholder="

【Java算法】滑动窗口 下

​ ​    🔥个人主页: 中草药 🔥专栏:【算法工作坊】算法实战揭秘 🦌一.水果成篮 题目链接:904.水果成篮 ​ 算法原理 算法原理是使用“滑动窗口”(Sliding Window)策略,结合哈希表(Map)来高效地统计窗口内不同水果的种类数量。以下是详细分析: 初始化:创建一个空的哈希表 map 用来存储每种水果的数量,初始化左右指针 left

温湿度采集及OLED显示

目录 软件I2C和硬件I2C每隔2秒钟采集一次温湿度数据,显示到OLED上,同时通过串口发送到上位机的“串口助手”软件 软件I2C和硬件I2C "I2C"代表Inter-Integrated Circuit,是一种用于在数字电路之间进行通信的串行通信协议。软件I2C和硬件I2C是两种实现这种协议的方式。 软件I2C是通过软件来模拟I2C通信协议的实现方式。在这种情况下,微控制

Linux之时间显示

在linux中使用使用date的方式来显示时间,但是如果想按照自己想要的格式展示,那就需要加上一点参数了 显示当前时间 date 2024年 06月 23日 星期日 23:21:42 CST 显示当前年份 date +%Y 2024 显示当前月份 date +%m 6 显示当前日期 date +%d 23 自定义显示格式 date "+%Y-%m-%d

【QML】用 Image(QQuickPaintedItem) 显示图片

大体功能: 频繁地往界面推送图片,帧率达到视频效果。捕获画布上的鼠标事件和键盘事件。 代码如下: // DrawImageInQQuickPaintedItem.pro 代码如下:QT += quick# You can make your code fail to compile if it uses deprecated APIs.# In order to do so, uncom

Vue3的Teleport:Teleport是Vue3的一个新功能,它允许我们将子组件渲染到父组件以外的地方,这在处理模态框、弹出窗口等情况时非常有用

I. Teleport 的概述 Teleport 的定义:   在 Vue 3.0 中,Teleport 是一个新的内置组件,它允许我们将任何部分的渲染内容 Teleport(传送)到 Vue 应用范围之外的地方。 换句话说,你可以控制片段,让它们在 DOM 中的任何位置渲染,而不仅仅是在当前组件内部。   Teleport 的效用和应用场景:   Teleport 的主要用途是处理在 UI

leetcode刷题(43)——239. 滑动窗口最大值

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值------------

卧槽,6。套死你猴子,Tomcat访问html页面显示源码?

卧槽,6。Tomcat访问html页面显示源码? 元凶text/explain //踩坑!!!不能用 servletResponse.setContentType("text/explain,否则访问html会看到源码,而不是渲染页面; charset=UTF-8");servletResponse.setContentType("text/html; charset=UTF-8");