这个代码以前工作但是在Android 4.2和OpenCV 2.4.4上它失败了,但我不知道为什么.任何人都可以为我解释它吗?
谢谢你的帮助.
巴兹
public void SaveImage (Mat mat) {
Mat mIntermediateMat = new Mat();
Imgproc.cvtColor(mRgba, mIntermediateMat, Imgproc.COLOR_RGBA2BGR, 3);
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String filename = "barry.png";
File file = new File(path, filename);
Boolean bool = null;
filename = file.toString();
bool = Highgui.imwrite(filename, mIntermediateMat);
if (bool == true)
Log.d(TAG, "SUCCESS writing image to external storage");
else
Log.d(TAG, "Fail writing image to external storage");
}
Run Code Online (Sandbox Code Playgroud)
bool每次都会回来假.对于用户#0,文件路径/名称应该是("storage/emulated/0/Pictures/barry.png"),并且目录是在那里.
什么可以使imwrite返回false?
我可以将mat转换为bmp并自己保存(我在非OpenCV应用程序中执行其他操作)但是因为Highgui.imwrite在那里,并且这段代码在我写入2.4.0并在Android上测试时曾经工作过3.x,如果可以,我想用它.
非常感谢
巴兹
Bar*_*rry 18
我简直不敢相信.[捂脸].
将此添加到您的清单文件Barry:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
请问有人来打我吗?我设法从清单中删除了写入权限,所以真的没有任何意外,它不会写...
卫生署.
巴里
小智 5
实际上有两个可能的问题:
Android权限.要解决此问题,请向清单添加权限
"android.permission.WRITE_EXTERNAL_STORAGE"
您正尝试将文件保存到SD卡,并且您的设备已在"磁盘驱动器"模式下连接到PC.这意味着您与PC共享访问权限.以"仅充电"模式连接设备.检查连接模式使用
Environment.getExternalStorageState(),它将返回 "磁盘模式"的共享并安装为"仅充电".
我修改了你的代码,现在它看起来像
public void SaveImage (Mat mat) {
Mat mIntermediateMat = new Mat();
Imgproc.cvtColor(mRgba, mIntermediateMat, Imgproc.COLOR_RGBA2BGR, 3);
File path = new File(Environment.getExternalStorageDirectory() + "/Images/");
path.mkdirs();
File file = new File(path, "image.png");
filename = file.toString();
Boolean bool = Highgui.imwrite(filename, mIntermediateMat);
if (bool)
Log.i(TAG, "SUCCESS writing image to external storage");
else
Log.i(TAG, "Fail writing image to external storage");
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
13640 次 |
| 最近记录: |