2015-02-06 72 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

相关问题