我有很多需要过滤的颜色范围,然后组合获得的图像以使单个图像包含所有这些过滤的颜色。像这样:
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的最快方法。 谢谢。
答案 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)