2012-01-10 1 views
1

Мне нужно преобразовать 1-канальный iplimage (серый) в Android Bitmap. У меня есть:1 канал iplimage -> Android Bitmap

IplImage aux = IplImage.create(senal_gray.width, senal_gray.height, IPL_DEPTH_8U, 4); 
cvCvtColor(senal_gray, aux, CV_GRAY2BGRA); 
Bitmap bm = Bitmap.createBitmap(aux.width, aux.height, Bitmap.Config.ARGB_8888); 
bm.copyPixelsFromBuffer(aux.getByteBuffer()); 

Я думаю, что проблема заключается в том порядке каналов, потому что с этим кодом я получаю полупрозрачную картину. Возможно, мне нужно изменить порядок каналов в «aux», чтобы получить заказ ARGB и проверить его с помощью конфигурации Bitmap (ARGB_8888). Это возможно?

ответ

0

Я никогда не использовал привязки OpenCV для Android, но вот вам какой-то код, чтобы вы начали. Рассматривайте это как псевдокод, потому что я не могу попробовать это ... но вы получите основную идею.

public static Bitmap IplImageToBitmap(IplImage src) { 
    int width = src.width; 
    int height = src.height; 
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    for(int r=0;r<height;r++) { 
     for(int c=0;c<width;c++) { 
      int gray = (int) Math.floor(cvGet2D(src,r,c).getVal(0)); 
      bitmap.setPixel(c, r, Color.argb(255, gray, gray, gray)); 
     } 
    } 
    return bitmap; 
} 
Смежные вопросы