精华内容
下载资源
问答
  • 图像合成(将两幅图片合成为1个), 测试可运行。
  • 图片合成

    2019-04-18 15:21:28
    # 将两张图片合成一张,但是这个代码的毛病就是两个图像的尺寸要一样,并且只能合成png的实例图 import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图片 src1 = cv2.imread('C:/Users/...
    # 将两张图片合成一张,但是这个代码的毛病就是两个图像的尺寸要一样,并且只能合成png的实例图
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 读取图片
    src1 = cv2.imread('C:/Users/Administrator/Desktop/123.png')
    src2 = cv2.imread('C:/Users/Administrator/Desktop/4.png')
    
    # 图像融合
    result = cv2.addWeighted(src1, 0.8, src2, 0.2, 10)
    
    # 显示图像
    #cv2.imshow("src1", src1)
    #cv2.imshow("src2", src2)
    cv2.imshow("result", result)
    
    # 等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
    展开全文
  • 图像变换-图像合成

    2012-07-18 10:39:43
    将多个图片合成一副图片 图像变换-图像合成
  • 图像合成

    千次阅读 2004-09-18 08:51:00
    5.4 图像合成01-9-17 下午 02:19:54假如要实现一个动画例如一只老鼠从屏幕左边往右边跑过去,一般的书上是这么介绍的:首先做一个老鼠的画片,再画一张黑白老鼠掩模图片。首先用掩模图处理屏幕,再用掩模处理老鼠...

    5.4 图像合成

    01-9-17 下午 02:19:54


    假如要实现一个动画例如一只老鼠从屏幕左边往右边跑过去,一般的书上是这么介绍的:首先做一个老鼠的画片,再画一张黑白老鼠掩模图片。首先用掩模图处理屏幕,再用掩模处理老鼠图片,最后把处理过的老鼠贴到屏幕上,前后要处理三个BitBlt函数。而且这样处理过程会使屏幕出现明显闪烁。要想制止闪烁还要先做一个兼容DC,先把屏幕图片拷贝至兼容DC,再在兼容DC上处理完老鼠后在再拷贝回屏幕。前后要用到五个BitBlt函数。图片比较小还好,若是图片很大,那速度简直就是“去年今日此电脑,人面老鼠相映红,人面不知何处去,老鼠还在慢慢爬”。是否有其他的解决方法呢?
    实现透明位图的方式
    1.最愚蠢的办法:直接在屏幕上逐点用SetPixel函数画图。
    2.一般的方法:用BitBlt函数作至少三个运算。
    3.最快的方法:直接写屏。
    4.性价比最高的办法:直接写数据缓冲区。
    四种方式的讨论:
    1.对于初搞图像处理的程序员来说,似乎逐点画过去的办法是第一选择,然而事实证明这是世界上速度最慢的方法,用它实现的最理想的动画效果是“去年一滴相思泪,今日方流到嘴边”。
    2.BitBlt:前面已介绍过,此处不再介绍。
    3.直接写屏:Dos下这种方式用得比较多,在windows环境下编程,windows3.1环境下只能加挂WinG才能实现,在win95或NT下可用函数CreateDIBSection()或是使用MicroSoftDirectX函数实现。这种方式我们将出专著介绍。此处不作讨论。
    4.写数据缓冲区:这个方法对环境要求较小,不需外挂软件,兼容于3.1和95、NT,速度也还可以,它的原理与直接写屏相似,而且可以方便地移植到直接写屏方式中去。我们将在此介绍此方法。
    读写数据缓冲区:
    大家可能还记得在前面介绍的class MYDIB,里面有两个参数,一个是bmp信息头,一个是bmp数据区,大家是否能想象得到假如修改了bmp数据区的数据,再显示图像会有什么结果?这块数据区,就是我们要使用的数据缓冲区。
    透明位图
    要想实现透明位图,首先要有两张图片,一张作为源位图,一张作为目的位图,程序员要把源位图贴到目的位图上,并且要指明什么颜色要屏蔽掉,为此,我们在class MYDIB上增加了一个函数Show(MYDIB* dib,int x1,int y1,int x2,int y2,int x3,int y3,BYTE r1, BYTE g1,BYTE b1,BYTE r2,BYTE g2,BYTE b2),这个函数的用法有点类似于BitBlt函数,它的意思为:把己方缓冲区内的数据拷贝到类dib的缓冲区中去,其中从RGB(r1,g1,b1)至RGB(r2,g2,b2)的颜色为透明色,x1、y1、x2、y2、x3、y3为目标坐标、拷贝范围、源坐标,其意义与BitBlt相同。在Show函数的实现过程中,我们首先算出要改变的源数据、目标数据地址,然后分析要拷贝的数据颜色是否属于屏蔽色,假如是屏蔽色,则不拷贝数据,否则拷贝。
    另外一种透明位图方式
    透明色固然是一种比较简单的实现方式,但是有的时候也需要另外一种实现方式,这就是直接指定颜色索引方式,我们可以指定在调色板中某某号至某某号为透明色。因此,在class MYDIB中再增加一个函数Show(MYDIB* dib,int x1,int y1,int x2,int y2,int x3,int y3,register BYTE x,register BYTE y),这个函数的原理与前一种方式差不多,只是比前一种方式少了四个参数,由以颜色指定透明色改成以颜色索引指定透明色。
    透明位图的刷新速度
    到底更改数据缓冲区方式的速度快,还是BitBlt速度快?要是BitBlt速度快的话,以前的一番心血岂非成了滚滚长江东逝水,为此我们要用实例分析一下,建立一个名为Tp的基于对话框的程序,加入源程序mybmp.cpp和mybmp.h,在tpdlg.h文件头中加入#include "mybmp.h",在类CTPDlg中加入两个成员变量bmp1和bmp2。在窗口初始化时设置定时器,打开文件“1.bmp”、“2.bmp”,在定时器消息响应过程中完成拷贝和刷新过程,编译并运行程序。我们可以看到一个“AllTime”参数,它显示刷新256张位图需要大约20_21秒左右。现在注释掉定时器消息响应过程中的透底函数bmp1.Show((MYDIB*)&bmp2,0,0,640,480,0,0, 0,0,0,i,i,i),再看刷新256张位图大约需要15_16秒,这是单纯使用函数StretchDIBits所需的时间。可见此处一个透明位图完成时间相当于一点四个BitBlt时间,比照BitBlt方式的三个BitBlt时间(差效果)、五个BitBlt时间(好效果)要好得多。当然,这与直接写屏比又差得多了。
    现在再将透底函数换成bmp1.Show((MYDIB*)&bmp2,0,0,640,480,0,0, 0,i),我们不由惊喜地看到现在刷新256张位图的时间为16_17秒,几乎可以认为,缓冲区读写时间已经可以忽略不计。
    01_9_17_53.GIF

    图5.3
    实例分析
    在这个实例中,我们要实现一个动画,背景是一位绝代佳人,前面有一只狗牵着它的宠物跑来跑去。素材需要五张图片,其中背景一张,动画四张。我们分析一下它的实现方式:
    在类CMovieDlg中,我们首先用语句BMP bmp[5]定义了五张图片,然后用语句MYDIB temp定义了一个临时图片。在对话框初始化过程函数中分别读入五张位图,设定定时器为一百毫秒,在定时器响应函数中操作过程如下:首先将背景写入临时图片,再将小狗透去白色写入临时图片,最后将临时图片写上屏幕。
    01_9_17_54.GIF

    图5.4
    展开全文
  • Android不规则图片合成,不规则相框合成
  • 在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第...

    在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码:

    设置授权

    第一步:在引用了SharpImage.dll之后,调用SharpImage方法之前,一定要先通过下面代码来设置授权信息,如果是试用版,直接输入Test即可。

    KeyMgr.SetKey("Test");
    

    初始化一个ImageEngine

    从之前的一篇博文中,我们介绍了一张图看懂SharpImage,从那篇文章我们可以看出,SharpImage通过ImageEngine来作为图像处理的基石,所有效果都是作为ImageEngine的Effects来进行的,Effects将被应用到ImageEngine的各种Element上,产生千变万化的效果。请看下面的代码:

    //实例化ImageEngine
    engine = new ImageEngine();
    

    设置ImageEngine的基础参数

    对ImageEngine进行一些自定义设置,具体可参考API手册。代码如下:

    //对一些基础属性进行设置
    engine.Canvas.AutoSize = true;
    engine.Canvas.CenterElements = true;
    engine.Canvas.Width = 320;//此处一般设置为图片的宽即可
    engine.Canvas.Height = 213;//此处一般设置为图片的高即可
    engine.Canvas.Fill.Type = FillType.Solid;//采用纯色填充画布
    engine.Canvas.Fill.BackgroundColor = Color.White;//画布为白色的
    

    加载待处理的图片

    将待处理的图片加载到内存,SharpImage支持多种方式加载:从图片URL, 本地路径,Bitmap对象, 字节数组, Base64字符串,可任选其一。这里演示下三种方式的代码:

    #region 加载测试图片的GDI+对象
    bmpDemoImage = Properties.Resources.demo;
    #endregion
    
    #region 加载测试图片的字节流
    using (MemoryStream ms = new MemoryStream())
    {
        bmpDemoImage.Save(ms, bmpDemoImage.RawFormat);
        arrDemoImage = ms.ToArray();
    }
    #endregion
    
    #region 加载测试图片的Base64字符串
    strBase64DemoImage = Convert.ToBase64String(arrDemoImage);
    #endregion
    

    初始化ImageElement

    在SharpImage中,图片被抽象为ImageElement,我们将待处理图片,绑定到ImageElement上。代码如下:

    //建立一个ImageElement
    imageEle = new ImageElement();
    
    //接下来,根据具体的图片数据源类型来为ImageElement提供数据,这里演示是用一个ComboBox来手动选择的
    switch (cmbBox11.SelectedIndex)
    {
      case 0:
              //图片URL
              imageEle.SourceType = ImageSource.File;
              imageEle.SourceFile = "http://www.zzsgzn.com/images/demo.jpg";
              break;
      case 1://本地路径
              imageEle.SourceType = ImageSource.File;
              imageEle.SourceFile = "c:\\demo.jpg";
              break;
      case 2://GDI+对象
              imageEle.SourceType = ImageSource.Image;
              imageEle.SourceImage = bmpDemoImage;
              break;
      case 3://字节数组
              imageEle.SourceType = ImageSource.Binary;
              imageEle.SourceBinary = arrDemoImage;
              break;
      case 4://base64字符串
              imageEle.SourceType = ImageSource.Base64String;
              imageEle.SourceBase64 = strBase64DemoImage;
              break;
    }
    

    绑定ImageElement和ImageEngine

    将ImageElment对象和ImageEngine绑定在一起, 只需要执行下面的代码即可:

    //将该ImageElement绑定到图像引擎对象上
    engine.Elements.Add(imageEle);
    

    此时,一定要注意:engine.Elements可以包含很多的element,最终的效果,将是这些元素的叠加。这个原理和Photoshop的图层叠加是一个原理。

    创建另外一个ImageElement

    哈吼!准备工作就绪啦!下面实例化要叠加的图片元素,如果有多个,就实例化多个:

    //生成一个参与合成的Element的子类,这里为ImageElement
    ImageElement ele = new ImageElement();
    imageEle.SourceType = ImageSource.File;
    imageEle.SourceFile = "logo.jpg";
    
    //将该Element添加到图像引擎中,SharpImage将完成合成
    engine.Elements.Add(ele);
    

    获取处理结果

    应用完之后,就可以获取处理结果啦!

    Image bmpResult = engine.GetOutputImage();
    

    运行效果图

    [外链图片转存失败(img-DsjPo162-1569392864478)(http://blog.zzsgzn.com/posts/46316/1.jpg)]

    demo源码下载

    点击下载源码

    相关推荐

    您可以需要了解如何获取摄像头帧图片,或者桌面屏幕图片,请了解SharpCapture:
    SharpCapture,桌面屏幕,摄像头,音视频采集类库

    您可以需要了解对摄像头亮度对比度色调曝光等几十种参数进行调整,请了解SharpCamera:
    SharpCamera,专业的摄像头高级参数深控类库

    展开全文
  • 该资源(0积分免费下载)为C#编写的高动态HDR图片合成软件,不同曝光下的几张图片合成一张高清的图片,附件是一个执行文件,打开即可使用,需要源码私聊 高动态范围图像的英文名称为HDR,全称为High Dymamic Range...
  • VB实现图像叠加-图片合成效果,将两张照片的可见部分合成在一张图片上,两者通过特殊的图像算法进行叠加,最后将叠加成功的图片显示在VB窗口的ImageList控件中,这也可看作是一个基础级的VB图像处理实例吧,为以后...
  • 天津理工大学图像处理合成方面程序源代码,用于合成图像包括完整程序图片
  • FotoMix(图像合成).rar

    2020-03-08 11:00:43
    FotoMix(图像合成).rar FotoMix(图像合成).rar FotoMix(图像合成).rar
  • 图片合成

    2013-06-07 17:13:16
    图片合成,方便使用,记得评分~图片合成,方便使用,记得评分~
  • 图像合成技术

    2013-09-06 08:18:38
    制作图像合成,使用扫描技术合成风景和人物到一个照片的全新软件。
  • opencv图像合成

    千次阅读 2019-08-03 18:34:58
    图像合成本质上是alpha blending,也称为alpha融合,数学表达如下 y = alpha * x1 + (1 - alpha) * x2 opencv中提供了融合函数,可进行单通道或多通道整合(本质上是各个通道分别整合),如下为官方文档描述。 对于...

    图像合成本质上是alpha blending,也称为alpha融合,数学表达如下
    y = alpha * x1 + (1 - alpha) * x2
    opencv中提供了融合函数,可进行单通道或多通道整合(本质上是各个通道分别整合),如下为官方文档描述。

    对于c++版本,有7个参数,分别是:

    • src1,输入图像1
    • alpha,src1的权重
    • src2,输入图像2
    • beta,src2的权重
    • gamma,结果偏移
    • dst,输出图像
    • dtype,输出图像的位宽设置,默认为-1,此时输出图像位宽等于src1的位宽
      该方法公式如下:dst = src1alpha + src2beta + gamma;

    对于更便捷的python来说,方法为cv2.addWeighted,参数与c++版本基本一样,后面直接看代码。

    1.opencv图像融合c++实现

    直接show代码:

    #include "opencv2/highgui/highgui.hpp"
    #include <opencv2/imgproc/imgproc.hpp>
    #include "opencv2/opencv.hpp"
    #include <opencv2/core/core.hpp>
    #include <iostream>
    #include <stdio.h>
    
    using namespace cv;
    using namespace std;
    
    int main(int argc, char **argv)
    {
        Mat imsrc1 = imread(argv[1]);
        Mat imsrc2 = imread(argv[2]);
        Mat imsrc2_scaler;      //将imsrc2缩放到imsrc1的尺寸
        Mat imdst;              //合成的目标图像
        double alpha = 0.3;
        double gamma = 0;
        if(imsrc1.size() != imsrc2.size()){
            printf("resize start!\n");
            //resize(imsrc2, imsrc2_scaler, Size(imsrc1.cols, imsrc1.rows), 0, 0, INTER_LINEAR);
            resize(imsrc2, imsrc2_scaler, imsrc1.size(), 0, 0, INTER_LINEAR);    //方法2
            addWeighted(imsrc1, alpha, imsrc2_scaler, 1 - alpha, gamma, imdst);
        }
        else{
            addWeighted(imsrc1, alpha, imsrc2, 1 - alpha, gamma, imdst);
        }
    
        imwrite("imdst.jpg", imdst);
        return 0;
    }
    

    保存为image_merge.cpp
    编译:g++ pkg-config --cflags --libs opencv image_merge.cpp -o test
    运行:./test im1.jpg im2.jpg
    原始图片:
    在这里插入图片描述
    在这里插入图片描述
    结果如下:
    在这里插入图片描述
    在这里插入图片描述

    2.python图像合成

    python实现如下,简洁、便捷!

    import cv2
    
    imsrc1 = cv2.imread("../../c-base/opencv-imageprocess/im1.jpg")
    imsrc2 = cv2.imread("../../c-base/opencv-imageprocess/im2.jpg")
    
    alpha = 0.7
    
    imdst = cv2.addWeighted(imsrc1, alpha, imsrc2, 1 - alpha, 0)
    #cv2.namedWindow("merge")
    #cv2.imshow("merge", imdst)
    cv2.imwrite("imDstMerge.jpg", imdst)
    
    

    3.通道split及区域合图

    split可将多通道拆分开,然后各个通道使用Rect做区域融合

    #include "opencv2/highgui/highgui.hpp"
    #include <opencv2/imgproc/imgproc.hpp>
    #include "opencv2/opencv.hpp"
    #include <opencv2/core/core.hpp>
    #include <iostream>
    #include <stdio.h>
    
    using namespace cv;
    using namespace std;
    
    //合成图像的中间区域
    int main(int argc, char **argv)
    {
        Mat imsrc1 = imread(argv[1]);
        Mat imsrc2 = imread(argv[2]);
        Mat imsrc2_scaler;      //将imsrc2缩放到imsrc1的尺寸
        Mat imdst;              //合成的目标图像
        double alpha = 0.3;
        double gamma = 0;
    
        vector<Mat> channels_src1;
        split(imsrc1, channels_src1);
        Mat imageRedChannels = channels_src1.at(0);
        Mat imageGreenChannels = channels_src1.at(1);
        Mat imageBlueChannels = channels_src1.at(2);
    
        resize(imsrc2, imsrc2_scaler, Size(imsrc1.cols / 2, imsrc1.rows / 2), 0, 0, INTER_LINEAR);
        vector<Mat> channels_src2;
        split(imsrc2_scaler, channels_src2);
        Mat imageRedChannels_src2 = channels_src2.at(0);
        Mat imageGreenChannels_src2 = channels_src2.at(1);
        Mat imageBlueChannels_src2 = channels_src2.at(2);
    
        addWeighted(imageRedChannels(Rect(imsrc1.cols / 4, imsrc1.rows / 4, imsrc2_scaler.cols, imsrc2_scaler.rows)), 
            0.3, imageRedChannels_src2, 0.7, 0, imageRedChannels(Rect(imsrc1.cols / 4, imsrc1.rows / 4, imsrc2_scaler.cols, imsrc2_scaler.rows)));
        addWeighted(imageGreenChannels(Rect(imsrc1.cols / 4, imsrc1.rows / 4, imsrc2_scaler.cols, imsrc2_scaler.rows)), 
            0.3, imageGreenChannels_src2, 0.7, 0, imageGreenChannels(Rect(imsrc1.cols / 4, imsrc1.rows / 4, imsrc2_scaler.cols, imsrc2_scaler.rows)));
        addWeighted(imageBlueChannels(Rect(imsrc1.cols / 4, imsrc1.rows / 4, imsrc2_scaler.cols, imsrc2_scaler.rows)), 
            0.3, imageBlueChannels_src2, 0.7, 0, imageBlueChannels(Rect(imsrc1.cols / 4, imsrc1.rows / 4, imsrc2_scaler.cols, imsrc2_scaler.rows)));
    
        merge(channels_src1, imdst);
        imwrite("imdst.jpg", imdst);
        return 0;
    }
    

    结果如下:
    在这里插入图片描述

    参考:
    [1] https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html

    展开全文
  • 数字图像合成技术综述吴昊,徐丹(云南大学计算机科学与工程系, 昆明 650091)摘 要数字图像合成一直是图像处理中的研究热点,在图片编辑,平面设计,电影特效等领域有着广泛的应用。从原图像中准确地提取目标物体并将其...
  • C#多付图像合成

    2011-10-31 09:35:26
    C#多付图像合成C#多付图像合成C#多付图像合成C#多付图像合成C#多付图像合成C#多付图像合成C#多付图像合成C#多付图像合成
  • 前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放、移动、绘制和添加水印,继续我的"随手拍"项目完成给图片添加相框、圆形圆角显示图片图像合成的功能介绍.我主要从三个方面进行讲述,首先如何通过assets...
  • 在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第...
  • 在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第...
  • 重点对多GPU系统上图像合成优化方法进行研究,提出一种基于压缩掩码位图的图像合成优化方法。该方法以二进制位表征像素的有效性状态,实现了图像有效像素的编码压缩,并在压缩编码基础上定义了4种位运算操作,能够快速...
  • 最近研究了一下图像合成雾的方法,看了一些文献以及查找了一些方法,如下为各位学习的同学进行整理,便于满足自身的科研需要,减少不必要的时间花费。 目前主流的方法总结为以下两种: 1.通过RGB通道合成雾。 2.通过...
  • 主要介绍了Python图像处理实现两幅图像合成一幅图像的方法,结合实例形式分析了Python使用Image.blend()接口与Image.composite()接口进行图像合成的相关操作技巧,需要的朋友可以参考下
  • YUV图像合成原理

    千次阅读 2014-11-27 19:41:10
    YUV图像合成原理 引言:在视频监控中最常用的就是图像拼接和字符叠加,25FPS的视频流,如果每隔40MS就从各个通道中取一幅图像来合成,则可以看到一个实时的合成视频。合成的过程也就是原始图像的拼接、缩放的过程,...
  • android带透明色的图片,转换成ayuv图片,然后与camera yuv图像合成算法,算法已经在项目中验证通过。
  • OpenCV图像合成

    2019-10-11 10:27:12
    OpenCV图像合成前言实现步骤运行结果 前言 这一章节主要讲OpenCV的几个核心操作之图像的算术运算中的图像合成(Image blending)这部分,由于我电脑中opencv是3.4.1的,而程序是在pycharm中安装的4.1.1的package,...
  • 在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第...
  • 在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第...
  • 在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第...
  • php 图片合成

    2018-06-13 10:19:53
    GD和图像处理(二) ...1. 图片合成: 图片资源路径文件 $path1 = ‘C:\Users\Administrator\Desktop\10600004.png’; $path2 = ‘C:\Users\Administrator\Desktop\106000040.png’; ...
  • 这是一个基于MATLAB多聚焦图像融合将两张到六张不同焦点的图片合成成一张的项目资源,谢谢支持。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,422
精华内容 41,368
关键字:

图像合成