无法使用 OpenCV 加载图像
Can't load image with OpenCV
我尝试在 Android 上使用 OpenCV 中的 Imgcodecs.imread
加载位于可绘制文件夹中的图像,但是当我检查图像数据时,它是 null
.
这是我加载图片的简单代码:
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mImageRGBA = inputFrame.rgba();
img_object = Imgcodecs.imread("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\rear_of_car.png");
Log.i("aaa2", img_object.dump());
return mImageRGBA;
}
这是来自该函数的 logcat 信息:
06-26 00:27:15.056 24939-25059/com.example.bruce.car_tracking_1 I/aaa2: []
我在这里做错了什么?我找到的路径不正确吗?还是我加载图片不正确?
已解决:
大家好,我用另一种方式解决了我的问题。非常感谢 sturkmen 的尝试帮助
我使用可绘制文件夹中的加载图像,该图像是位图并将其显示在屏幕上,然后我将其转换为 Mat 以便进一步使用。 :) 这是我的完整代码。
首先,创建2个全局变量
ImageView imageview;
Bitmap icon;
然后,
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Resources res = getResources();
icon = BitmapFactory.decodeResource(res, R.drawable.rear_of_car);// get data from drawable folder
imageview.setImageBitmap(icon); // show data in imageview of screen
mOpenCvCameraView.enableView();
} break;
default: {super.onManagerConnected(status);} break;
}
}
};
public void onCameraViewStarted(int width, int height) {
img_object = new Mat(157, 140, CvType.CV_8UC1);
}
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mImageRGBA = inputFrame.rgba();
Utils.bitmapToMat(icon, img_object);//convert image bitmap to Mat to use it futher
Log.i("aaa", String.valueOf(img_object.cols()));
Log.i("aaa1", String.valueOf(img_object.rows()));
return mImageRGBA;
}
public void onCameraViewStopped() {
img_object.release();
}
记得在activity_main.xml
中添加图片视图
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_alignParentBottom="true" />
并将您的图片放入可绘制文件夹
为确保您的路径有效,请尝试编写测试图像
Mat test = new Mat(3,3,0);
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",test);
如果您可以保存图像,您也可以加载它。
编辑:
你也可以试试
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mImageRGBA = inputFrame.rgba();
img_object = Imgcodecs.imread("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\rear_of_car.png");
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",img_object);
Log.i("aaa2", img_object.dump());
return mImageRGBA;
}
编辑 2:
请尝试
img_object = Imgcodecs.imread("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\rear_of_car.png");
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",img_object);
而不是
Mat test = new Mat(3,3,0);
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",test);
我尝试在 Android 上使用 OpenCV 中的 Imgcodecs.imread
加载位于可绘制文件夹中的图像,但是当我检查图像数据时,它是 null
.
这是我加载图片的简单代码:
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mImageRGBA = inputFrame.rgba();
img_object = Imgcodecs.imread("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\rear_of_car.png");
Log.i("aaa2", img_object.dump());
return mImageRGBA;
}
这是来自该函数的 logcat 信息:
06-26 00:27:15.056 24939-25059/com.example.bruce.car_tracking_1 I/aaa2: []
我在这里做错了什么?我找到的路径不正确吗?还是我加载图片不正确?
已解决:
大家好,我用另一种方式解决了我的问题。非常感谢 sturkmen 的尝试帮助
我使用可绘制文件夹中的加载图像,该图像是位图并将其显示在屏幕上,然后我将其转换为 Mat 以便进一步使用。 :) 这是我的完整代码。
首先,创建2个全局变量
ImageView imageview;
Bitmap icon;
然后,
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Resources res = getResources();
icon = BitmapFactory.decodeResource(res, R.drawable.rear_of_car);// get data from drawable folder
imageview.setImageBitmap(icon); // show data in imageview of screen
mOpenCvCameraView.enableView();
} break;
default: {super.onManagerConnected(status);} break;
}
}
};
public void onCameraViewStarted(int width, int height) {
img_object = new Mat(157, 140, CvType.CV_8UC1);
}
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mImageRGBA = inputFrame.rgba();
Utils.bitmapToMat(icon, img_object);//convert image bitmap to Mat to use it futher
Log.i("aaa", String.valueOf(img_object.cols()));
Log.i("aaa1", String.valueOf(img_object.rows()));
return mImageRGBA;
}
public void onCameraViewStopped() {
img_object.release();
}
记得在activity_main.xml
中添加图片视图 <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_alignParentBottom="true" />
并将您的图片放入可绘制文件夹
为确保您的路径有效,请尝试编写测试图像
Mat test = new Mat(3,3,0);
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",test);
如果您可以保存图像,您也可以加载它。
编辑: 你也可以试试
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mImageRGBA = inputFrame.rgba();
img_object = Imgcodecs.imread("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\rear_of_car.png");
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",img_object);
Log.i("aaa2", img_object.dump());
return mImageRGBA;
}
编辑 2:
请尝试
img_object = Imgcodecs.imread("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\rear_of_car.png");
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",img_object);
而不是
Mat test = new Mat(3,3,0);
Imgcodecs.imwrite("D:\Project_Android\Car_Tracking_1\app\src\main\res\drawable\test.png",test);