2023-01-20 370
作为起动器,我只想通过OpenCV将位图转换为Greyscale.我已拥有一切
跑步,但是一旦我想将图像转换为灰度,它就会崩溃.
谁能帮忙?我希望摘要足够了,如果没有,我可以附加剩下的片段.
Java文件的一部分:
// convert to opencv structure
Mat image = new Mat();
Mat grayimage = new Mat();
Utils.bitmapToMat(b2, image);
// call opencv for processing
grayimage = convertToGray (image);
// convert back
Utils.matToBitmap(grayimage, b2);
JNI CPP文件:
JNIEXPORT jlong JNICALL Java_com_my_sample_MainMenuActivity_convertToGray (JNIEnv*, jobject, jlong addrRGBA)
{
LOGI("Converting to Gray.");
Mat *mRGBA = (Mat*)addrRGBA;
Mat *_retval_;
cvtColor(*mRGBA, *_retval_, CV_RGB2GRAY);
LOGI("Successfully finished Converting to Gray.");
return (jlong) _retval_;
}
它永远不会成功地将图像转换为成功.
似乎该位图未正确地转换为垫子.
位图本身确实存在,我可以在ImageView上显示.
有人知道我(显然)做错了什么?
05-14 21:26:27.082: I/native(22394): Converting to Gray.
05-14 21:26:27.082: A/libc(22394): Fatal signal 11 (SIGSEGV) at 0xcd10001d (code=1), thread 22394 (ialabs.mysample)
对不起,如果这个问题在其他地方回答,我还没有找到MAT的示例,
只是一些与iPlimage一起.
您有两个空Mat对象.您不能将空的东西转换为灰色.
尝试以下操作:
Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1);
Utils.bitmapToMat(b, tmp);
Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY);
其中b是您的图像Bitmap.
Utils.matToBitmap(tmp, b);
将其添加以将Mat对象转换回Bitmap.
最简单的方法:
public static Bitmap edgesim(Bitmap first) {
Bitmap image1;
///////////////transform back to Mat to be able to get Canny images//////////////////
Mat img1=new Mat();
Utils.bitmapToMat(first,img1);
//mat gray img1 holder
Mat imageGray1 = new Mat();
//mat canny image
Mat imageCny1 = new Mat();
//mat canny image
Mat imageCny2 = new Mat();
/////////////////////////////////////////////////////////////////
//Convert img1 into gray image
Imgproc.cvtColor(img1, imageGray1, Imgproc.COLOR_BGR2GRAY);
//Canny Edge Detection
Imgproc.Canny(imageGray1, imageCny1, 10, 100, 3, true);
///////////////////////////////////////////////////////////////////
//////////////////Transform Canny to Bitmap/////////////////////////////////////////
image1= Bitmap.createBitmap(imageCny1.cols(), imageCny1.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(imageCny1, image1);
return image1;
}
简单错误:
convertToGray (image.getNativeObjAddr());
是正确的.
以上所述是小编给大家介绍的用于安卓的OpenCV。将图像转换为灰度的简单例子,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25950.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态