здесь код я написал в C++Чтение пикселей значения данных из файла растрового изображения изображения
int main()
{
Mat im = imread("C:/santhu/bitmap.bmp");
int rows = im.rows;
int cols = im.cols;
cout<<"rows\n"<<rows;
cout<<"cols"<<cols;
if (im.empty())
{
cout << "Cannot load image!" << endl;
return -1;
}
cout<<"the output for matrix of pixels";
for (int i = 0; i <cols ; i++)
{
Vec3b *ptr = im.ptr<Vec3b>(i);
for (int j = 0; j < rows; j++)
{
Vec3b pixel = ptr[j];
cout<<pixel<<"\t";
}
cout<<"\n";
}
getchar();
imshow("Image", im);
waitKey(0);
}
код прекрасно работает до тех пор, пока не показывает каждые пикселей значения в терминах Vec3b
, но в конце концов исключение как «Unhandled exception at 0x75afb9bc in san.exe: Microsoft C++ exception: cv::Exception at memory location 0x0043f9d0..
» появится в подсказке, когда окна попросят сломать или продолжить поток.
И в командной консоли, где im получает отображаемые значения пикселей, в этом он показывает мне opencv error:assertion failed(y==0 ||(data && dims)=1 &&(unsigned) y <(unsigned)size.p[0] in cv::Mat::ptr,file c:\opencv\build\include\opencv2\core\mat.hpp,line 428
, после отображения данных пикселей.
Я проверил всю сеть и mat.hpp
, также это встроенная функция, поэтому я разочарован, может кто-нибудь объяснить эту ошибку (исключение) и помочь мне запустить код только до тех пор, пока пиксели данных не станут их в растровом изображении и выполните nicely.plz
Вы полагаете, без проверки или требуя, что массив содержит Vec3b пикселей. –
Давид, флаг по умолчанию для imread заставит его в CV_8UC3, так что все в порядке. – berak
ya berak thats true..and plz post решение ребята .. – Santhosh