如何正确将位图转换为 OpenCV 灰度垫
How to properly convert Bitmap to OpenCV grayscale Mat
我想在集成OpenCV模块的Android项目中使用此库。
原生函数代码:
extern "C" JNIEXPORT void JNICALL
Java_my_package_MyActivity_featherEdges(
JNIEnv *env,
jobject /* this */,
cv::Mat &I,
cv::Mat &p,
cv::Mat &q
) {
int r = 60;
double eps = 1e-6;
eps *= 255 * 255;
q = guidedFilter(I, p, r, eps);
}
Kotlin 侧掩码位图到垫转换器:
fun Bitmap.maskToMat(): Mat {
val mat = Mat(this.width, this.height, CvType.CV_8UC1)
val obj = copy(Bitmap.Config.ARGB_8888, true)
Utils.bitmapToMat(obj, mat)
Imgproc.cvtColor(mat, mat, CvType.CV_8UC1)
Imgproc.cvtColor(mat, mat, Imgcodecs.IMREAD_GRAYSCALE)
return mat
}
原始图像位图到垫转换器:
fun Bitmap.objToMat(): Mat {
val mat = Mat(this.width, this.height, CvType.CV_8UC1)
val obj = copy(Bitmap.Config.ARGB_8888, true)
Utils.bitmapToMat(obj, mat)
return mat
}
我收到此错误:
terminating with uncaught exception of type cv::Exception: OpenCV(4.1.0) D:BGEraseappsrcmaincppguidedfilter.cpp:191: error: (-215:Assertion failed) I.channels() == 1 || I.channels() == 3 in function 'GuidedFilter'
那么如何正确地将位图转换为 Mat?首先,我想将位图传递到本机函数中,但这非常复杂。
我决定只将位图保存在外部存储上,因为位图转换过程慢 30-40%,然后只需将绝对路径传递到本机函数中:
extern "C" JNIEXPORT jint JNICALL
Java_my_package_name_MyActivity_featherEdges(
JNIEnv *env,
jobject /* this */,
jstring obj_path,
jstring mask_path,
jstring result_path) {
cv::Mat I = cv::imread(ConvertJString(env, obj_path), cv::IMREAD_COLOR);
cv::Mat p = cv::imread(ConvertJString(env, mask_path), cv::IMREAD_GRAYSCALE);
int r = 60;
double eps = 1e-6;
eps *= 255 * 255;
cv::Mat q = guidedFilter(I, p, r, eps);
cv::imwrite(ConvertJString(env, result_path), q);
return 0;
}
相关文章:
- OpenCV - 如何在灰度图像上应用 Kmeans?
- OpenCV - 如何将灰度转换为彩色(CV_8UC3)?
- 使用 OpenCV 和 C++将 16 位灰度图像更改为彩色图像
- 如何在OpenCV中减去两个不同尺寸的图像和灰度图像
- C++:灰度位图标题和实时绘画+opencv图像处理
- 如何正确将位图转换为 OpenCV 灰度垫
- 将 YUV420p QVideoFrame 转换为灰度 OpenCV 垫
- 在OpenCV中将灰度图像转换为单色
- Mat的convertTo函数在OpenCV中将灰度图像的类型转换为CV_32F时抱怨断言错误
- 使用条款 使用Opencv和Qt减去两个灰度图像
- OPENCV从Yuyv Pixelformat视频框架创建YUV420或灰度垫子对象
- OPENCV:从RGB转换为灰度只有蓝色
- 使用OpenCV在Android上使用神经网络进行灰度图像分类
- 如何在 OpenCV 中使用 16 位灰度
- 使用Opencv直接从网络摄像头获取灰度图像
- 将颜色图像转换为OpenCV中的灰度问题
- 在 openCV 中访问某些像素的强度值(灰度图像)
- Qt + OpenCV 灰度误差
- 如何在OpenCV中创建二进制非灰度图像
- 转换OpenCV灰度垫Caffe blob