OpenCV 捕获的图像分辨率与 Fotoapparat
OpenCV captured image resolution vs Fotoapparat
我正在做一个项目,我们需要将识别气泡作为考试的一部分。
我们一直在根据要求测试不同的图像拍摄方法(我们需要在实时相机流上叠加形状),结果如下。
正如我们所见,当直接从 Fotoapparat 获取图像时,canny 检测比 OpenCV 实现效果好得多。我曾尝试调整相机分辨率(通过扩展 JavaCameraView)以及其他许多东西,但 none 似乎有效,OpenCV 捕获总是表现不佳。
任何人都可以指出正确的方向,让我以 phone 可用的最高分辨率从 OpenCV 捕获其中一帧吗?
提前致谢:)
结果:
OpenCV - 原始投资回报率
OpenCV - ROI 的 Canny 变换
Fotoapparat - 原始 ROI(压缩 31%,以便我可以上传)
Fotoapparat - ROI 的 Canny 转换
我终于明白了!
发生的事情是,当尝试从 OpenCV 的 onCameraFrame
中提取帧时,它默认为一个很小的分辨率(并受屏幕尺寸影响),因为它实际上是在截屏屏幕上的内容当时。
解决方案是在我自己的 class 中实现 camera.takePicture
,它实现了 JavaCameraView
(类似于问题 here 中显示的那个),然后再采取图片,选择设备上可用的最高分辨率。
代码如下:
fun takePic(jpgCallback: Camera.PictureCallback) {
val params = mCamera.parameters
params.jpegQuality = 100 //doesn't hurt to be sure
val supportedSizes = params.supportedPictureSizes
if (supportedSizes.isNullOrEmpty().not()) {
var w = 0
var h = 0
for (size in supportedSizes) {
if (size.width > w || size.height > h) {
w = size.width
h = size.height
}
}
Log.e("----", "Using largest supported size... w: $w // h: $h")
params.setPictureSize(w, h)
}
mCamera.parameters = params
mCamera.takePicture(null, null, jpgCallback)
}
我正在做一个项目,我们需要将识别气泡作为考试的一部分。 我们一直在根据要求测试不同的图像拍摄方法(我们需要在实时相机流上叠加形状),结果如下。
正如我们所见,当直接从 Fotoapparat 获取图像时,canny 检测比 OpenCV 实现效果好得多。我曾尝试调整相机分辨率(通过扩展 JavaCameraView)以及其他许多东西,但 none 似乎有效,OpenCV 捕获总是表现不佳。
任何人都可以指出正确的方向,让我以 phone 可用的最高分辨率从 OpenCV 捕获其中一帧吗?
提前致谢:)
结果:
OpenCV - 原始投资回报率
OpenCV - ROI 的 Canny 变换
Fotoapparat - 原始 ROI(压缩 31%,以便我可以上传)
Fotoapparat - ROI 的 Canny 转换
我终于明白了!
发生的事情是,当尝试从 OpenCV 的 onCameraFrame
中提取帧时,它默认为一个很小的分辨率(并受屏幕尺寸影响),因为它实际上是在截屏屏幕上的内容当时。
解决方案是在我自己的 class 中实现 camera.takePicture
,它实现了 JavaCameraView
(类似于问题 here 中显示的那个),然后再采取图片,选择设备上可用的最高分辨率。
代码如下:
fun takePic(jpgCallback: Camera.PictureCallback) {
val params = mCamera.parameters
params.jpegQuality = 100 //doesn't hurt to be sure
val supportedSizes = params.supportedPictureSizes
if (supportedSizes.isNullOrEmpty().not()) {
var w = 0
var h = 0
for (size in supportedSizes) {
if (size.width > w || size.height > h) {
w = size.width
h = size.height
}
}
Log.e("----", "Using largest supported size... w: $w // h: $h")
params.setPictureSize(w, h)
}
mCamera.parameters = params
mCamera.takePicture(null, null, jpgCallback)
}