在Emgu或opencv中合并多个图像

时间:2018-09-30 11:49:31

标签: c# opencv emgucv

我有很多需要过滤的颜色范围,然后组合获得的图像以使单个图像包含所有这些过滤的颜色。像这样:

    Image<Gray, Byte> grayscale2 = frame2.Convert<Gray, Byte>();
                for (int i = 1; i < colors.Length - 1; i++)
                {
                    var color1 = colors[i].Split('-');
                    var color2 = colors[i+1].Split('-');
                   var img = frame2.InRange(new Bgr(double.Parse(color1[0]), 
                                 double.Parse(color1[1]), double.Parse(color1[2])),
                        new Bgr(double.Parse(color2[0]), double.Parse(color2[1]), 
                                 double.Parse(color2[2]))).Convert<Gray, Byte>();            
                }

“颜色”是RGB保存的颜色作为字符串的数组。 我正在寻找在grayscale2中合并(合并)所有img的最快方法。 谢谢。

2 个答案:

答案 0 :(得分:1)

我做了这样的事情,首先将图像转换为位图,然后将它们组合起来非常快:

    public static Bitmap CombineBitmap(string[] files)
    {
        //change the location to store the final image.

        Bitmap img = new Bitmap(files[0]);

        Bitmap img3 = new Bitmap(img.Width, img.Height);
        Graphics g = Graphics.FromImage(img3);
        g.Clear(SystemColors.AppWorkspace);
        foreach (string file in files)
        {
             img = new Bitmap(file);

            img.MakeTransparent(Color.White);
            g.DrawImage(img, new Point(0, 0));
            //img3.MakeTransparent(Color.White);

        }


        using (var b = new Bitmap(img3.Width, img3.Height))
        {
            b.SetResolution(img3.HorizontalResolution, img3.VerticalResolution);

            using (var g2 = Graphics.FromImage(b))
            {
                g2.Clear(Color.White);
                g2.DrawImageUnscaled(img3, 0, 0);
            }

            // Now save b as a JPEG like you normally would
            return img3;

        }

答案 1 :(得分:0)

我不确定您想要什么。我在python中的opencv中制作了一个简单的程序。由于您具有灰度图像,因此可以添加此图像,但是您需要记住这一点。如果image1中的像素值为150,image2中的值为150,则最后一个像素的值为255。因此,您必须添加重量。

import cv2 as cv
import numpy as np


img1= cv.imread('image1.jpg')
img2= cv.imread('image2.jpg')


hsv1 = cv.cvtColor(img1, cv.COLOR_BGR2HSV)
hsv2 = cv.cvtColor(img2, cv.COLOR_BGR2HSV)

lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])

mask1 = cv.inRange(hsv1, lower_blue, upper_blue)
mask2 = cv.inRange(hsv2, lower_blue, upper_blue)

alpha=0.5
beta =0.5
output =cv.addWeighted( mask1, alpha, mask2, beta, 0.0, )

cv.imshow('av1',img1)
cv.imshow('av2',img2)
cv.imshow('av3',mask1)
cv.imshow('av4',mask2)
cv.imshow('av4',output)

cv.waitKey(0)