package com.example.cppinandroid;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import org.opencv.core.Mat;
import java.io.File;
import static org.opencv.imgcodecs.Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE;
import org.opencv.imgcodecs.Imgcodecs;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById( R.id.sample_text );
Mat image;
image = Imgcodecs.imread( "/home/<myName>/a.png", CV_LOAD_IMAGE_GRAYSCALE);
if ( image.size().height > 0 )
{
tv.setText( "No datfa in image!");
}
else
{
tv.setText( "xxff " + image.size().height);
}
}
}
我没有使用任何可提取或外部媒体。图像存在于主文件夹中,可以通过提供完全相同的路径由普通的opencv C++程序打开。
这里有人告诉我原生C++NDK将无法读取Linux路径。好吧。这里都是Java。
当我执行它时,它总是在else语句中运行,并将高度显示为0.0
。
我已经删除了多余的代码。
在Linux上的这个程序中,从主文件夹读取一个普通的png的方法是什么?
看到这个示例代码,也许可以帮助你,我测试了这个代码,为我工作,我可以得到任何图像的宽度和高度。
1)首先,您需要将OpenCVLibrary导入到您的项目中:see this link-link
2)然后您需要对应用程序设置read_external_storage
权限:plz在androidmanifest.xml
上添加此命令:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
3)您需要文件选取器来获取特定的文件我使用ru.bartwell:exfilepicker
:Link
implementation 'ru.bartwell:exfilepicker:2.1'
4)最后,您只需将以下简单代码添加到mainactivity
:
private static final int READ_STORAGE_PERMISSION_REQUEST_CODE = 1;
private static final int EX_FILE_PICKER_RESULT = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initLoadOpenCV();
if (!checkPermissionForReadExtertalStorage()) {
requestPermissionForReadExtertalStorage();
}
}
private void initLoadOpenCV() {
boolean isDebug = OpenCVLoader.initDebug();
if (isDebug) {
Log.i("init Opencv", "init openCV success!!");
} else {
Log.e("init Opencv", "init openCV failure!!");
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == EX_FILE_PICKER_RESULT) {
ExFilePickerResult result = ExFilePickerResult.getFromIntent(data);
if (result != null && result.getCount() > 0) {
// Here is object contains selected files names and path
Log.i("folderLocation", result.getPath() + result.getNames().get(0));
Mat srcMat1 = Imgcodecs.imread(result.getPath() + result.getNames().get(0));
if (srcMat1.empty()) {
return;
}
int width = srcMat1.width();
int height = srcMat1.height();
int type = srcMat1.type();
Log.i("width", srcMat1.width() + "");
Log.i("height", srcMat1.height() + "");
Log.i("type", srcMat1.type() + "");
}
}
}
public boolean checkPermissionForReadExtertalStorage() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int result = getApplicationContext().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
return result == PackageManager.PERMISSION_GRANTED;
}
return false;
}
public void requestPermissionForReadExtertalStorage() {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
READ_STORAGE_PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case READ_STORAGE_PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("value", "Permission Granted, Now you can use local drive .");
ExFilePicker exFilePicker = new ExFilePicker();
exFilePicker.start(this, EX_FILE_PICKER_RESULT);
} else {
Log.e("value", "Permission Denied, You cannot use local drive .");
requestPermissionForReadExtertalStorage();
}
break;
}
}
问题内容: 我正在用python编写OpenCV程序,在某些时候我有类似的东西 问题是我必须在继续之前检测是否正确读取了图像文件。如果无法打开图像,则返回,所以我想做些类似的事情: 如果未打开图像(例如,文件不存在),则等于(预期)。但是,当工作时,条件将中断: 即,返回的值不能用作布尔值。问题似乎是如果成功则返回numpy.ndarray,否则返回(布尔值)。 到目前为止,我的解决方案涉及使用返
我想从socket读取图像响应,并再次将其传递给另一个socket。但现在我连图像反应都看不懂。
我试图分块读取输入流并写入文件以避免内存问题,我接收json格式的数据,并使用以下代码写入文件。 我的问题是,大多数json都写得很好,虽然其中一些包含损坏的数据,但我不确定我是否正确地将CharBuffer与BufferedReader一起使用,我观察到的另一件事是,对于少量数据,它正确地将CharBuffer写入文件,当我从服务器接收到更大的数据(大约2MB的输入流-不是很大)时,我通常会遇到
问题内容: 我有一个数据结构,我希望能够在关闭程序之前写入文件,然后在下次应用程序启动时从文件中读取数据以重新填充该结构。 我的结构是。对象很简单;对于成员变量,它具有一个String和两个布尔类型的小型本机数组。这是一个真正简单的应用程序,我希望一次不会超过10-15 对。 我一直在尝试(不成功)对象输入/输出流。我需要使对象类可序列化吗? 您能给我一些最好的建议吗?我只需要向正确的方向推进即可
问题内容: 对于正在编写的程序,我正在使用base64.b64encode(f.read(image))从一台计算机上传输图像,并尝试在接收脚本中读取它而不将其保存到硬盘驱动器中(以最大程度地减少这种情况)处理时间)。我很难弄清楚如何将图像读取到OpenCV中而不将其保存在本地。 这是我发送图像的代码如下所示: 同时,这是接收它的代码。(这在on_message函数中,因为我正在使用MQTT进行传
问题内容: 我正在使用shippable将私有docker映像推送到Google容器注册表,然后再从笔记本电脑本地或Google Compute Engine实例内部提取。 我知道该命令有效,但是我不能依赖gcloud被安装在有人可能需要从中提取映像的每台计算机上。 如果我在计算机上运行,则会出现以下错误: 是否可以通过某种形式的OAuth或密钥来认证或访问图像?我想避免在需要拉取映像的每台计算机