首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >灰度Iplimage到android位图

灰度Iplimage到android位图
EN

Stack Overflow用户
提问于 2011-09-23 18:57:00
回答 2查看 2.3K关注 0票数 1

我正在使用opencv通过opencv将android位图转换为grescale。下面是我使用的代码,

代码语言:javascript
运行
复制
          IplImage image = IplImage.create( bm.getWidth(), bm.getHeight(), IPL_DEPTH_8U, 4); //creates default image
        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);

黑石为源镜像。这段代码运行良好,并转换为灰度,我已经通过保存到sdcard然后再次加载进行了测试,但当我尝试使用下面的方法加载它时,我的应用程序崩溃了,任何建议。

代码语言:javascript
运行
复制
                bm.copyPixelsFromBuffer(grey.getByteBuffer());
               iv1.setImageBitmap(bm);

iv1是我要设置黑石的镜像视图。

EN

回答 2

Stack Overflow用户

发布于 2012-01-15 02:02:40

我从来没有使用过Android的OpenCV绑定,但这里有一些代码可以帮助您入门。就当它是伪代码吧,因为我不能尝试……但是你会得到基本的概念。这可能不是最快的解决方案。我从this answer粘贴过来的。

代码语言:javascript
运行
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2013-10-30 16:31:55

您的IplImage grey只有一个频道,而您的Bitmap bm有4个或3个频道(ARGB_8888ARGB_4444RGB_565)。因此,bm不能存储灰度图像。在使用之前,您必须将其转换为rgba。

示例:(您的代码)

代码语言:javascript
运行
复制
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))

代码语言:javascript
运行
复制
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);

我想这可能会有帮助!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7527917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档