Ваш IplImage grey
имеет только один канал, а ваш Bitmap bm
имеет 4 или 3 (ARGB_8888
, ARGB_4444
, RGB_565
). Поэтому bm
не может хранить изображение в градациях серого. Вы должны преобразовать его в rgba перед использованием.
Пример:
(ваш код)
IplImage image = IplImage.create( bm.getWidth(), bm.getHeight(), IPL_DEPTH_8U, 4);
bm.copyPixelsToBuffer(image.getByteBuffer());
int w=image.width(); int h=image.height();
IplImage grey=cvCreateImage(cvSize(w,h),image.depth(),1);
cvCvtColor(image,grey,CV_RGB2GRAY);
Если вы хотите загрузить его:
(Вы можете повторно использовать image
или создать еще один (temp
))
IplImage temp = cvCreateImage(cvSize(w,h), IPL_DEPTH_8U, 4); // 4 channel
cvCvtColor(grey, temp , CV_GRAY2RGBA); //color conversion
bm.copyPixelsFromBuffer(temp.getByteBuffer()); //now should work
iv1.setImageBitmap(bm);
Возможно, это поможет!