我正在尝试使用NumPy和PIL将两个图像组合在一起.我在MATLAB中这样做的方式如下:
>> M1 = imread('_1.jpg');
>> M2 = imread('_2.jpg');
>> resM = M1 + M2;
>> imwrite(resM, 'res.jpg');
Run Code Online (Sandbox Code Playgroud)
我得到这样的东西:
alt text http://www.deadlink.cc/matlab.jpg
使用合成程序并添加图像,MATLAB结果似乎是正确的.
在Python中我试图做同样的事情:
from PIL import Image
from numpy import *
im1 = Image.open('/Users/rem7/Desktop/_1.jpg')
im2 = Image.open('/Users/rem7/Desktop/_2.jpg')
im1arr = asarray(im1)
im2arr = asarray(im2)
addition = im1arr + im2arr
resultImage = Image.fromarray(addition)
resultImage.save('/Users/rem7/Desktop/a.jpg')
Run Code Online (Sandbox Code Playgroud)
我得到这样的东西:
alt text http://www.deadlink.cc/python.jpg
为什么我会得到所有那些时髦的颜色?我也试过使用ImageMath.eval("a+b", a=im1, b=im2),但是我得到一个关于RGB不支持的错误.
我也看到有一个Image.blend()但需要alpha.
什么是实现我正在寻找的最佳方式?
源图像(图像已被删除):
alt text http://www.deadlink.cc/_1.jpg alt text http://www.deadlink.cc/_2.jpg
嗯,好吧,我使用添加图片图标添加了源图像,当我正在编辑帖子时它们出现,但由于某种原因,图像没有显示在帖子中.
(图片已被删除)2013 05 09
我需要一些C++ /指针帮助.当我创建一个RGB IplImage并且我想访问i时,我使用以下C++类:http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv- intro.html
template<class T> class Image
{
private:
IplImage* imgp;
public:
Image(IplImage* img=0) {imgp=img;}
~Image(){imgp=0;}
void operator=(IplImage* img) {imgp=img;}
inline T* operator[](const int rowIndx) {
return ((T *)(imgp->imageData + rowIndx*imgp->widthStep));}
};
typedef struct{
unsigned char b,g,r;
} RgbPixel;
typedef struct{
float b,g,r;
} RgbPixelFloat;
typedef Image<RgbPixel> RgbImage;
typedef Image<RgbPixelFloat> RgbImageFloat;
typedef Image<unsigned char> BwImage;
typedef Image<float> BwImageFloat;
Run Code Online (Sandbox Code Playgroud)
我一直在使用CUDA,所以有时我必须将所有数据放入一个数组中,我喜欢将每个通道保存在自己的数组中,这样看起来更容易处理数据.所以我通常会这样做:
IplImage *image = cvLoadImage("whatever.tif");
RgbImageFloat img(image);
for(int i = 0; i < exrIn->height; i++)
{
for(int j …Run Code Online (Sandbox Code Playgroud)