2013-03-03 32 views
0

我想使用cvMerge()合併8個圖像,但它不工作。我應該如何合併這8個圖像?我如何在opencv中合併8個圖像?

下面是查看圖像的不同位平面的代碼。並將所有8張圖像合併爲輸入圖像。

#include <iostream> 
#include <cv.h> 
#include <highgui.h> 
#include "rgb.h" 
#include <cmath> 
using namespace std; 

int T(int r) 
{ 
if (r == 0) 
return 0; 
else 
return 255; 
} 

int main() 
{ 
char infname[256]; 
cout << "Enter input image : "; 
cin >> infname; 
IplImage *mono = cvLoadImage(infname, 0); 
BwImage pic(mono); 
int H = mono->height; 
int W = mono->width; 
IplImage *out0 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *out1 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *out2 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *out3 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *out4 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *out5 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *out6 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *out7 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 1); 
IplImage *output1 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 4); 
IplImage *output2 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 4); 
IplImage *output = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 2); 

BwImage bp0(out0); 
BwImage bp1(out1); 
BwImage bp2(out2); 
BwImage bp3(out3); 
BwImage bp4(out4); 
BwImage bp5(out5); 
BwImage bp6(out6); 
BwImage bp7(out7); 
BwImage b1(output1); 
BwImage b2(output2); 
BwImage b(output); 

for (int y = 0; y < H; y++) 
for (int x = 0; x < W; x++){ 
bp0[y][x] = T(pic[y][x] % 2); 
bp1[y][x] = T((pic[y][x]/2) % 2); 
bp2[y][x] = T((pic[y][x]/4) % 2); 
bp3[y][x] = T((pic[y][x]/8) % 2); 
bp4[y][x] = T((pic[y][x]/16) % 2); 
bp5[y][x] = T((pic[y][x]/32) % 2); 
bp6[y][x] = T((pic[y][x]/64) % 2); 
bp7[y][x] = T((pic[y][x]/128) % 2); 
} 

// here's the pronlem. i guess 

cvMerge(out0,out1,out2,out3,output1); 
cvMerge(output1,out4,out5,out6,output2); 
cvMerge(output2,out7,NULL,NULL,output); 

cvWaitKey(0); 
cvSaveImage("b0.png", out0); 
cvSaveImage("b1.png", out1); 
cvSaveImage("b2.png", out2); 
cvSaveImage("b3.png", out3); 
cvSaveImage("b4.png", out4); 
cvSaveImage("b5.png", out5); 
cvSaveImage("b6.png", out6); 
cvSaveImage("b7.png", out7); 
cvSaveImage("b8.png", output); 
cvReleaseImage(&mono); 
cvReleaseImage(&out0); 
cvReleaseImage(&out1); 
cvReleaseImage(&out2); 
cvReleaseImage(&out3); 
cvReleaseImage(&out4); 
cvReleaseImage(&out5); 
cvReleaseImage(&out6); 
cvReleaseImage(&out7); 
cvReleaseImage(&output); 
return 0; 
} 
+4

提示:''鍵通常位於鍵盤的左上角。 – 2013-03-03 07:00:27

+0

首先嚐試合併2張圖片,如果您遇到問題,請發佈包含您遇到的任何錯誤的特定問題。 – 2013-03-03 07:16:31

+0

是的,添加2 - 4個圖像的工作。第一個cvMerge工作。但是當我添加第二個和第三個合併時,出現錯誤:斷言失敗。中止(核心轉儲) – Abby 2013-03-03 15:15:52

回答

0

我的猜測是,除非你有一個RGBA格式輸出圖像,通道的數量必須是3,而不是2或4,你把它放在:

IplImage *output2 = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 4); 
IplImage *output = cvCreateImage(cvSize(W,H), IPL_DEPTH_8U, 2); 

嘗試設置它爲3,並且一次只合並3張圖像。 但我不認爲合併可以將3通道圖像作爲輸入... 然後在合併之前使用cvtColor(src, src, CV_BGR2GRAY);(它將對3個通道的值進行平均每個像素)。

相關問題