我仔细研究了许多链接和网站,但未能得到答案。我不想问这个,我知道 JPEG 压缩,它只生成压缩图像。甚至 Motion JPEG 也会压缩图像 I 帧。我的问题是有什么区别。我正在编写一个需要发送视频的相机应用程序,但我的相机单元支持 jpeg 和 mjpeg。运动 JPEG 相对于 JPEG 的优势是什么?感谢您的任何建议
我发现 JPEG 和 MJPEG 像素格式之间的 V4L2 差异 http://www.axis.com/in/en/learning/web-articles/technical-guide-to-network-video/video-compression
第一个链接意味着使用 MJPEG 可以提高捕获率,但图像的大小将相同。第二个链接确认 MJPEG 和 JPEG 压缩之间没有区别。如果上述结论成立,那么我可以在任何图像查看器上打开 mjpeg 帧,但我不能像第一个链接中所述
所以我使用 AVCaptureSession 用前置摄像头拍照。我还从此会话中创建预览层以在屏幕上显示当前图像。
previewLayer = AVCaptureVideoPreviewLayer(session: session)
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
Run Code Online (Sandbox Code Playgroud)
一切都按其应有的方式进行。但现在我遇到了一个问题,因为我需要实现一个按钮来翻转/镜像(变换)此预览图层 - 这样用户就可以选择拍摄正常的自拍照或拍摄镜像的自拍照。
我已经尝试过转换 PreviewLayer 并且它有点有效。问题是,如果您旋转设备,预览图片会以另一种方式旋转,因为它已被变换。(在默认或任何其他相机应用程序中,图片随相机旋转)。任何人都知道如何实现这一目标?
镜像预览图层:(我尝试变换图层,甚至稍后查看,结果相同)。
@IBAction func mirrorCamera(_ sender: AnyObject) {
cameraMirrored = !cameraMirrored
if cameraMirrored {
// TRANSFORMING VIEW
self.videoPreviewView.transform = CGAffineTransform(scaleX: -1, y: 1);
// OR LAYER
self.previewLayer.transform = CATransform3DMakeScale(-1, 1, 1);
} else {
self.videoPreviewView.transform = CGAffineTransform(scaleX: 1, y: 1);
self.videoPreviewView.transform = CATransform3DMakeScale(1, 1, 1);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将相机项目更新到 Android N,因此我将旧的CameraCaptureSession移动到ReprocessableCaptureSession。我做到了并且工作正常,但是有了这个新功能,我可以CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG在我的设备中使用模板,并且可以使用reprocessCaptureRequest重新处理帧。
这是我的问题出现的地方。因为我没有找到任何示例,而且我不太理解有关如何使用的小文档reprocessCaptureRequest:
每个重新处理 CaptureRequest 都会处理从 CameraCaptureSession 的输入 Surface 到重新处理捕获请求中包含的所有输出 Surface 的一个缓冲区。重新处理输入图像必须从同一相机设备捕获的一幅或多幅输出图像生成。应用程序可以通过queueInputImage(Image)向相机设备提供输入图像。应用程序必须使用这些输出图像之一的捕获结果来创建重新处理捕获请求,以便相机设备可以使用该信息来实现最佳的重新处理图像质量。对于仅支持 1 个输出 Surface 的相机设备,提交具有多个输出目标的重新处理 CaptureRequest 将导致 CaptureFailure。
我试图在google.sources中查看有关相机的 CTS 测试,但他们的做法与我相同。使用多个 imageReader,将TotalCaptureResult图片保存在LinkedBlockingQueue<TotalCaptureResult>. 后来只是打电话:
TotalCaptureResult totalCaptureResult = state.captureCallback.getTotalCaptureResult();
CaptureRequest.Builder reprocessCaptureRequest = cameraStore.state().cameraDevice.createReprocessCaptureRequest(totalCaptureResult);
reprocessCaptureRequest.addTarget(state.yuvImageReader.getSurface());
sessionStore.state().session.capture(reprocessCaptureRequest.build(), null, this.handlers.bg());
Run Code Online (Sandbox Code Playgroud)
但它总是抛出一个 RuntimeException:
java.lang.RuntimeException: Capture failed: Reason 0 in frame 170,
我只想知道哪种方法是使用 ReprocessableCaptureSession 的正确方法,因为我已经尝试了所有方法,但我不知道我做错了什么。
我已将 libjingle 库用于 webrtc android 应用程序。我已经成功实现了双向通信的音频视频流。
到目前为止,我一直使用前置摄像头进行视频流,但现在我想为用户提供选项,以选择前置或后置摄像头进行视频流。
我怎样才能存档它?我对此一无所知。
我尝试过VideocaptureAndroid切换相机方法但不起作用。
如果有人知道的话可以帮我解决这个功能吗?
提前致谢。
我现在正在努力完成一项特定的计算机视觉任务。例如,假设我们有一个道路的相机框架。现在我想用水平平移的假想相机生成一个新帧。此外,还添加了一个微小的摄像角度。为了说明这一点,我上传了一张演示图片:
如何在 python 中从原始框架创建新框架?对于我的其他计算机视觉任务,我已经在使用 OpenCV。
我在camera.qml中有qml相机小部件。qml 组件是从放置在后台堆栈小部件上的 Qt 小部件“WidgetCamera”加载的。该小部件在创建时就启动了相机设备。
如何使相机仅在小部件显示在前台时启动。反之亦然,当小部件进入后台时如何释放相机?
相机.qml
Item {
width: 640
height: 360
Camera {
id: camera
}
VideoOutput {
source: camera
anchors.fill: parent
}
}
Run Code Online (Sandbox Code Playgroud)
widgetCamera.h
class WidgetCamera : public QWidget
{
Q_OBJECT
public:
WidgetCamera() {
QQuickWidget *qw= new QQuickWidget;
qw->setSource(QUrl("qrc:///camera.qml"));
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
主窗口.h
class MainWindow : QMainWindow
{
Q_OBJECT
public:
MainWindow() {
QStackedWidget *sw = new QStackedWidget;
sw->addWidget(new QWidget());
sw->addWidget(new WidgetCamera());
// ...
}
}
Run Code Online (Sandbox Code Playgroud) 我使用相机包来实现简单的功能。我主要遵循包提供的示例。当我打开相机小组件页面时,程序包会自动提示提供相机和麦克风的权限。单击允许这两种权限后,调试器将暂停,但出现异常:
Exception has occurred.
FlutterError (A CameraController was used after being disposed.
Once you have called dispose() on a CameraController, it can no longer be used.).
Run Code Online (Sandbox Code Playgroud)
这是所需的代码:
class CameraPage extends StatefulWidget {
@override
_CameraPageState createState() => _CameraPageState();
}
class _CameraPageState extends State<CameraPage>
with WidgetsBindingObserver {
CameraController _controller;
List<CameraDescription> _availableCameras;
...
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
_initialize();
}
Future<void> _initialize() async {
await _getCameras();
_controller = CameraController(_availableCameras[0], ResolutionPreset.high);
await _controller.initialize();
if (!mounted) {
return;
}
setState(() …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在我的网络视图上制作一个简单的输入按钮来访问相机和文件。我读过的解决方案各不相同,只有几行代码,没有解释它们到我在 Android Studio 中下载和打开的盲 github 项目链接(Os-Fileup 等)的位置,而且它们通常有数十个文件,但没有任何内容真的对我有帮助,因为我不知道我在寻找什么。
我尝试过各种解决方案,包括包含这个包或那个包、请求权限等,但没有一个解决方案能为我解决问题,因为我可能错误地实现了它们,或者它们适用于更旧版本的 Android 或 Android Studio。我使用的是最新版本的 Android Studio,并且仅针对 Oreo 8.1(minSdkVersion 27 和 targetSdkVersion 28)。
对于我的 webview 应用程序的初始设置,我遵循了我在某处找到的一个简单教程,除了相机之外,一切都正常。
我终于在某处读到,授予应用程序权限(例如:访问相机、设备上的应用程序)不会传递到网络视图 - 所以这就是我陷入困境的地方。只有两个文件 - AndroidManifest 和 MainActivity.java ...所以这两个文件看起来就像您在下面看到的那样 - 我到底要在这些文件中更改什么才能使按钮在应用程序中正常工作浏览器中的同一设备?
The button from the webview.loadURL page:
<input id='uploadImage' type='file' accept='image/*' name='image' />
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="redacted.name.here">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.front" android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<application
android:allowBackup="true" …Run Code Online (Sandbox Code Playgroud) 我正在为 ios 创建运动检测应用程序。当摄像机实时拍摄时,任何物体都会经过摄像机,例如人、动物。比我想要的检测运动功能。怎么可能?
我不断地用 Python 读取来自 OpenCV 相机的图像,并从主程序中读取最新的图像。这是因为硬件有问题而需要的。
在搞乱了线程并获得非常低的效率(废话!)之后,我想切换到多处理。
这是线程版本:
class WebcamStream:
# initialization method
def __init__(self, stream_id=0):
self.stream_id = stream_id # default is 0 for main camera
# opening video capture stream
self.camera = cv2.VideoCapture(self.stream_id)
self.camera.set(cv2.CAP_PROP_FRAME_WIDTH, 3840)
self.camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 2880)
if self.camera.isOpened() is False:
print("[Exiting]: Error accessing webcam stream.")
exit(0)
# reading a single frame from camera stream for initializing
_, self.frame = self.camera.read()
# self.stopped is initialized to False
self.stopped = True
# thread instantiation
self.t = Thread(target=self.update, args=())
self.t.daemon = True …Run Code Online (Sandbox Code Playgroud)