2015-02-06 102 views
-1

我嘗試使用opencv C++執行任務並且任務是我正在嘗試使用opencv C++創建空白圖像,其背景爲白色。這裏是我的代碼:OpenCV:試圖創建一個空白圖像,但核心已轉儲

#include<opencv2/opencv.hpp> 
#include<opencv2/highgui/highgui.hpp> 
using namespace std; 
using namespace cv; 

int main() 
{ 
Mat img = imread("/home/jordan/opencv/Test/taskb/img.bmp"); 
Mat img2; 
int i,j; 
for(i=0;i<img.cols;i++) 
{ 
    for(j=0;j<img.rows;j++) 
    { 
    int Red=img.at<cv::Vec3b>(j,i)[2]; 
    int Green= img.at<cv::Vec3b>(j,i)[1]; 
    int Blue = img.at<cv::Vec3b>(j,i)[0]; 

    cout<<"cols="<<i<<" rows="<<j<<" Red="<<Red<<" Green="<<Green<<" Blue="<<Blue<<" \t\n"; 

    } 
} 

img2=img; 

for(i=0;i<img2.rows;i++) 
{ 
for(j=0;j<img2.cols;j++) 
{ 
    if (img2.channels() == 3) 
    { 
     img.at<cv::Vec3b>(j,i)[2]=255; 
     img.at<cv::Vec3b>(j,i)[1]=255; 
     img.at<cv::Vec3b>(j,i)[0]=255; 
    } 
} 
} 



cout<<"cols="<<img.cols<<" row="<<img.rows<<"\n"; 
namedWindow("Images",CV_WINDOW_AUTOSIZE); 
namedWindow("Image2",CV_WINDOW_AUTOSIZE); 
imshow("Images", img); 
imshow("Image2",img2); 

while(char(waitKey(1)) != 'q'){} 

return 0; 

} 

我試圖執行上面提到的代碼,但它顯示核心轉儲問題,提以下

*** Error in `./image': malloc(): memory corruption: 0x081da6e0 *** 
Aborted (core dumped) 
+1

內存損壞意味着你覆蓋了不屬於你的內存(在觸發崩潰的線路之前或之前)。您可能想要檢查您的索引和循環限制是否正確(您發佈的兩個區塊每個嘗試不同的順序)。 – Dave 2015-02-06 20:42:36

+0

valgrind和/或電子圍欄 – pm100 2015-02-06 20:51:39

回答

0

只使用一個構造函數:

Mat img = imread(...); 
Mat img2(img.size(), img.type(), Scalar::all(255)); 

也:你的行和列錯了

img.at<cv::Vec3b>(j,i)[2]=255; // should have been i,j 

(作爲一般的經驗法則 - 每當你自己寫opencv中的每像素循環時,你做錯了)

+0

感謝您的幫助。 – Jordan 2015-02-09 17:55:37

相關問題