简单的图像融合
2015-02-06 10:06
183 查看
含笑:不上上次的图像融合,一个小程序。
界面用了PictureBox1和PictureBox2存载两幅原始图片,用PictureBox3显示融合后的图片。
效果:
![](http://s10.sinaimg.cn/bmiddle/4d1f098244d2a4bbb5969)
主要算法代码如下,有兴趣的同学自己研究去。
首先添加命名空间:using System.Drawing.Imaging;
int BPP = 4;
Bitmap bgImage = new Bitmap(pictureBox1.BackgroundImage);
Bitmap fgImage = new Bitmap(pictureBox2.BackgroundImage);
int Width = bgImage.Width;
int Height = bgImage.Height;
BitmapData bgData = bgImage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
BitmapData fgData = fgImage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
unsafe
{
byte* bg = (byte*)bgData.Scan0;
byte* fg = (byte*)fgData.Scan0;
int offset = bgData.Stride - Width * 4;
for (int y = 0; y < Height; y++)
{
for (int x = 0; x < Width; x++)
{
if (fg[3] != 0)
{
bg[0] = (byte)((fg[0] - bg[0]) * 150 / 255 + bg[0]);
bg[1] = (byte)((fg[1] - bg[1]) * 150/ 255 + bg[1]);
bg[2] = (byte)((fg[2] - bg[2]) * 150 / 255 + bg[2]);
}
bg += BPP;
fg += BPP;
}//X
bg += offset;
fg += offset;
}//Y
bgImage.UnlockBits(bgData);
fgImage.UnlockBits(fgData);
Bitmap dstImage = (Bitmap)bgImage.Clone();
bgImage.Dispose();
fgImage.Dispose();
pictureBox3.BackgroundImage = dstImage;
}
}
}
界面用了PictureBox1和PictureBox2存载两幅原始图片,用PictureBox3显示融合后的图片。
效果:
主要算法代码如下,有兴趣的同学自己研究去。
首先添加命名空间:using System.Drawing.Imaging;
int BPP = 4;
Bitmap bgImage = new Bitmap(pictureBox1.BackgroundImage);
Bitmap fgImage = new Bitmap(pictureBox2.BackgroundImage);
int Width = bgImage.Width;
int Height = bgImage.Height;
BitmapData bgData = bgImage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
BitmapData fgData = fgImage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
unsafe
{
byte* bg = (byte*)bgData.Scan0;
byte* fg = (byte*)fgData.Scan0;
int offset = bgData.Stride - Width * 4;
for (int y = 0; y < Height; y++)
{
for (int x = 0; x < Width; x++)
{
if (fg[3] != 0)
{
bg[0] = (byte)((fg[0] - bg[0]) * 150 / 255 + bg[0]);
bg[1] = (byte)((fg[1] - bg[1]) * 150/ 255 + bg[1]);
bg[2] = (byte)((fg[2] - bg[2]) * 150 / 255 + bg[2]);
}
bg += BPP;
fg += BPP;
}//X
bg += offset;
fg += offset;
}//Y
bgImage.UnlockBits(bgData);
fgImage.UnlockBits(fgData);
Bitmap dstImage = (Bitmap)bgImage.Clone();
bgImage.Dispose();
fgImage.Dispose();
pictureBox3.BackgroundImage = dstImage;
}
}
}
相关文章推荐
- matlab练习程序(简单图像融合)
- OpenCV - 简单图像融合
- 简单图像融合1
- 图像融合(二)-- 简单加权融合
- 图像跟踪与识别-KCF+DSST算法简单融合
- 图像融合(二)-- 简单加权融合
- 【图像融合】简单加权融合
- 【图像融合】简单认识图像融合
- 简单图像融合2
- 图像融合(二)-- 简单加权融合
- java图像界面开发简单实例-JPanel应用
- 图像加密序列1(融合加密方法)
- 小波图像融合的Matlab实现示例(添加图片演示080428)
- java图像界面开发简单实例-JTextArea、JScrollPane、JPanel、JButton应用实例
- 简单的Java图像处理程序
- 给-4℃网友的摄像头简单图像采集程序的源代码
- java图像界面开发简单实例-JCheckBox、JLabel的应用
- java图像界面开发简单实例-JLabel,JFileChooser,JMenu应用
- java图像界面开发简单实例-JTextField、JPasswordField、JButton及事件的简单应用
- java图像界面开发简单实例-JButton及事件的简单应用