灰度 Iplimage 转 android 位图
我正在使用 opencv 将 android 位图转换为 grescale。下面是我正在使用的代码,
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);
bm 是源图像。这段代码工作正常并转换为灰度,我已经通过保存到 SD 卡然后再次加载来测试它,但是当我尝试使用下面的方法加载它时,我的应用程序崩溃了,有任何建议吗?
bm.copyPixelsFromBuffer(grey.getByteBuffer());
iv1.setImageBitmap(bm);
iv1 是 imageview,我想在其中设置 bm。
I am using opencv to convert android bitmap to grescale by using opencv. below is the code i am using,
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);
bm is source image. This code works fine and converts to greyscale, i have tested it by saving to sdcard and then loading again, but when i try to load it using below method my app crashes, any suggestions.
bm.copyPixelsFromBuffer(grey.getByteBuffer());
iv1.setImageBitmap(bm);
iv1 is imageview where i want to set the bm.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我从未使用过适用于 Android 的 OpenCV 绑定,但这里有一些代码可以帮助您入门。将其视为伪代码,因为我无法尝试它......但您会得到基本的想法。它可能不是最快的解决方案。我从这个答案粘贴。
I've never used the OpenCV bindings for Android, but here's some code to get you started. Regard it as pseudocode, because I can't try it out... but you'll get the basic idea. It may not be the fastest solution. I'm pasting from this answer.
您的
IplImage grey
只有一个通道,而您的Bitmap bm
有 4 或 3 个通道(ARGB_8888
、ARGB_4444
、<代码>RGB_565)。因此bm
无法存储灰度图像。使用前必须将其转换为rgba。例子:
(你的代码)
如果你想加载它:
(您可以重复使用您的
图像
或创建另一个图像(临时
))我可能会有所帮助!
Your
IplImage grey
has only one channel, and yourBitmap bm
has 4 or 3 (ARGB_8888
,ARGB_4444
,RGB_565
). Therefore thebm
can't store the greyscale image. You have to convert it to rgba before use.Example:
(your code)
If you want to load it:
(You can reuse your
image
or create another one (temp
))I might it will help!