2014-01-09 51 views
0

我已經寫了下面的程序,在三個通道中拆分image1,然後將image2添加到image1的藍色通道。我正在使用代碼塊編譯器,它沒有顯示任何錯誤,但是當我執行它時,命令提示符顯示運行時錯誤,並強制關閉我的程序。有人能告訴我我的程序有什麼問題嗎? 這裏是錯誤的屏幕截圖的鏈接,我得到 https://dl.dropboxusercontent.com/u/13916799/Capture4.JPGOpenCV拆分和合並程序顯示錯誤

using namespace std; 
using namespace cv; 

void addImages(Mat &image1,Mat &image2,Mat &result) 
{ 
    result.create(image1.size(),image1.type()); 

    vector<Mat> planes; 

    split(image1,planes); 

    planes[0] += image2; 

    merge(planes,result); 
} 


int main() 
{ 
    Mat image1 = imread("C:\\castle.jpg",CV_LOAD_IMAGE_UNCHANGED); 
    Mat image2 = imread("C:\\rain.jpg",CV_LOAD_IMAGE_UNCHANGED); 
    Mat result; 

    addImages(image1,image2,result); 

    namedWindow("vOut",CV_WINDOW_AUTOSIZE); 
    imshow("vOut",result); 

    waitKey(0); 
    destroyAllWindows(); 
} 

回答

1

的錯誤狀態:輸入參數的大小不匹配

要解決此錯誤檢查以下內容:

  • image1和image2的大小(列和行)必須相同
  • image2必須是NxMx1(1通道)

我想這個錯誤在於你的imread調用image2。 您使用CV_LOAD_IMAGE_UNCHANGED閱讀圖像,這可能會以rgb,bgr,rgba格式載入圖像,所有圖像都有多個通道。

要讀取具有灰度圖像(一個通道,請嘗試:CV_LOAD_IMAGE_GRAYSCALE) 檢查您的所有圖像(和平面)都具有正確的尺寸,並且您的代碼應該可以工作。

2

不能將一個通道圖像添加到三個通道圖像,

planes[0] += image2; 

,你可以在arithm.cpp

else if(!checkScalar(src2, src1.type(), kind2, kind1)) 
CV_Error(CV_StsUnmatchedSizes, 
       "The operation is neither 'array op array' (where arrays have the same size and the same number of channels), " 
       "nor 'array op scalar', nor 'scalar op array'"); 

找到你的錯誤消息圖像2添加到藍色通道image1的?我不太明白。

拆分image2並添加它們具有相同的通道,類型,尺寸等...