- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用带有 QAbstractVideoSurface 的 QCamera 实现了相机捕获。我将 QAbstractVideoSurface 扩展到派生类,以将捕获编码到缓冲区中以供将来处理。一切正常,但我在更改输入捕获的捕获分辨率时遇到问题。
使用 setNativeResolution() 似乎不起作用。
下面是代码的简要说明。
#ifndef _CAPTURE_BUFFER_H_
#define _CAPTURE_BUFFER_H_
#include <QMutex>
#include <QWidget>
#include <QImage>
#include <QVideoFrame>
#include <QAbstractVideoSurface>
#include <QVideoSurfaceFormat>
#include <control/qcircularbuffer.h>
class CaptureBuffer: public QAbstractVideoSurface
{
Q_OBJECT
public:
CaptureBuffer(int size = 30);
QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const;
bool start(const QVideoSurfaceFormat& format);
void stop();
bool present(const QVideoFrame& frame);
bool isEmpty() const;
void pushBack(const QVideoFrame& new_frame);
void popFront();
bool top(QVideoFrame& frame);
bool back(QVideoFrame& frame);
const QImage::Format& image_format() const {return m_image_format;}
const QSize& image_size() const {return m_image_size;}
protected:
void setNativeResolution(const QSize & resolution);
private:
QSize m_image_size;
QImage::Format m_image_format;
QCircularBuffer<QVideoFrame> m_buffer;
QMutex m_buffer_mutex;
};
#endif
CaptureBuffer::CaptureBuffer(int size) :
m_buffer(QCircularBuffer<QVideoFrame>(size))
{
}
QList<QVideoFrame::PixelFormat> CaptureBuffer::supportedPixelFormats(
QAbstractVideoBuffer::HandleType handleType) const
{
if (handleType == QAbstractVideoBuffer::NoHandle) {
return QList<QVideoFrame::PixelFormat>()
<< QVideoFrame::Format_RGB24
<< QVideoFrame::Format_RGB32
<< QVideoFrame::Format_ARGB32
<< QVideoFrame::Format_ARGB32_Premultiplied
<< QVideoFrame::Format_RGB565
<< QVideoFrame::Format_RGB555;
} else {
return QList<QVideoFrame::PixelFormat>();
}
}
bool CaptureBuffer::start(const QVideoSurfaceFormat& format)
{
const QImage::Format image_format = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
const QSize size = format.frameSize();
if (image_format != QImage::Format_Invalid && !size.isEmpty()) {
m_image_format = image_format;
m_image_size = size;
QAbstractVideoSurface::start(format);
return true;
} else {
return false;
}
}
void CaptureBuffer::stop()
{
QAbstractVideoSurface::stop();
}
bool CaptureBuffer::present(const QVideoFrame& frame)
{
pushBack(frame);
return true;
}
bool CaptureBuffer::isEmpty() const
{
return m_buffer.empty();
}
void CaptureBuffer::pushBack(const QVideoFrame& frame)
{
m_buffer_mutex.lock();
m_buffer.push_back(frame);
m_buffer_mutex.unlock();
}
void CaptureBuffer::popFront()
{
m_buffer_mutex.lock();
m_buffer.pop_front();
m_buffer_mutex.unlock();
}
bool CaptureBuffer::top(QVideoFrame& frame)
{
if(m_buffer.empty())
return false;
m_buffer_mutex.lock();
frame = m_buffer.front();
m_buffer_mutex.unlock();
return true;
}
bool CaptureBuffer::back(QVideoFrame& frame)
{
if(m_buffer.empty())
return false;
m_buffer_mutex.lock();
frame = m_buffer.back();
m_buffer_mutex.unlock();
return true;
}
void CaptureBuffer::setNativeResolution( const QSize & resolution )
{
QAbstractVideoSurface::setNativeResolution(resolution);
}
以下是 QCamera 的使用和附加到捕获缓冲区的方式:
m_camera = camera;
m_camera->setCaptureMode(QCamera::CaptureVideo);
m_camera->setViewfinder(m_capture_buffer);
m_camera->start();
考虑到网络摄像头支持此分辨率,我该如何调整输入捕获分辨率,使其从 640 x 480 变为 1280 x 720 等。
最佳答案
从 Qt5.2.1(来自 git)开始,Digia 似乎没有为 Windows 完全完成 QCamera。但是,还有更多选项可以解决分辨率设置问题。
如果便携性是必须的:
您可以试试 gstreamer。如我所见,gstreamer 插件的必要部分已实现。
我在 Windows 上工作,gstreamer 在 Windows 上使用 DirectShow,所以我决定直接使用 DirectShow 插件。
Qt5.2.1 有一个功能性的 DirectShow 核心插件,但它没有完全连接到 Qt 框架本身,因为 DSImageEncoderControl(将从 QImageEncoderControl 派生)在 DirectShow 插件中不存在。
存在 QAndroidImageEncoderControl 和其他一些移动性实现。看来 Digia 决定先插入 Qt Mobility 业务。
无论如何,他们在 Qt 文档中说:
QImageEncoderSettings imageSettings;
imageSettings.setCodec("image/jpeg");
imageSettings.setResolution(1600, 1200);
imageCapture->setEncodingSettings(imageSettings);
然而,当您调用 QCameraImageCapture::setEncodingSettings 时,Qt 会尝试通过 DSImageEncoderControl 设置分辨率,但由于缺少它,该部分代码将无法运行。大多数控件尚未在 DirectShow 插件中实现。
对我来说,另一个问题是捕获静止图像也需要设置表面,但我只想使用图像数据进行进一步处理,例如使用 OpenCV。
可能的解决方案:
如果您不需要跨平台的东西,您可以使用我从 Qt 的 DirectShow 插件中借来的代码,您还可以设置分辨率和像素格式。在我的示例中,我尝试遵循 Qt 的命名约定。
另一个问题是目前 QImage 只知道 RGB 格式,但一些相机设备以 YUYV 格式输出捕获的数据。因此需要转换。我还在我的代码中添加了一个简单的 YUYV 到 RGB24 转换器(感谢 FourCC.org)来测试我的笔记本电脑的摄像头,但我主要使用罗技 C920 Pro 高清摄像头,它在不需要转换的地方也输出 RGB24。
关于qt - 更改 QCamera 的输入分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19583191/
我正在使用 JavaFX 开发视频播放器。我正在将视频从本地文件系统加载到 JavaFX 类媒体中。然后我想获取宽度和高度,以便我可以将场景的尺寸设置为该大小: Media media = new M
我是OpenCV的新手,正在尝试解决这个问题。我有一个.mp4文件保存在从网络摄像头流式传输的磁盘上。现在,我需要制作视频的低分辨率版本,以上传到Web服务器(这个想法是,低分辨率预览实时或多或少地上
我在我的应用程序中使用 jfree 图表(折线图)...创建时我的图表看起来很模糊...我怎样才能获得高清晰度图像。 我使用过:ChartUtilities.writeScaledChartAsPNG
我正在用 Java 编写一个工具来处理我网站上上传的文件。我想以特定的方式管理图像:如果尺寸大于限制,我想首先调整图像的尺寸,然后再次检查尺寸。当然,我不想做无用的工作,所以我想在调整图像大小之前估计
是否有一种纯 WPF 方法来获取有关所有可用显示器大小(分辨率)的信息。我知道我可以使用 Screen.AllScreens 来获取它们,但在我的遗留项目中我无法添加新的引用(内置 WPF 程序集除外
看了Developer文档,部分理解了LDPI,HDPI,MDPI,XHDPI类比,网上到处找也没有找到具体答案。 我有两部手机,一部是小屏幕,一部是平板电脑。我希望我的小屏幕手机上的按钮看起来很小,
对于下面给定的网页, xyz {% load staticfiles %} html, body {
我在 Mac 上使用多个 JFrames 制作了一个程序,分辨率还可以,一切都适合屏幕。但是,当我在我的 PC 上运行该程序时,JFrames 太大并且会立即离开屏幕。 我的问题是:是否可以在 JFr
我需要有关如何检索屏幕分辨率的帮助,如下图所示。 我找到了 this documentation这真的很有帮助。这是我根据这些文档尝试的代码: int numberOfScreens = GetSys
有什么方法可以更改分辨率或为亚马逊 Kindle 键盘上的屏幕设置不同的边界?我的屏幕有一部分出现裂纹,我想解决这个问题。 我试过在文件系统中乱搞(通过 WiFi 连接),但我的所有属性更改都没有任何
快速提问, 我正在开发 libgdx 中的游戏,但遇到了问题。我正在尝试扩展我的 Assets ,我正在使用 Gdx.graphics.getDensity() 来获取密度,然后使用它作为乘数来设置我
我有一些关于屏幕分辨率的问题,我不清楚。这些问题假设我的应用程序将在 iOS 4.0 及更高版本以及 iPhone 3GS 或 iPhone 4 上运行。 启动图像 (default.png) 的大小
我们有一个应用程序在审核过程中被 Apple 应用程序审核人员拒绝。拒绝的原因是应用程序在 Ipad 上运行时无法正确缩放。 该应用程序本来就不是要在 Ipad 上运行的,但与他们争论这一点似乎没有意
我试图在不解码文件的情况下获取 JPEG 图像的分辨率。我从互联网上获得了几个样本,但没有一个可以正常工作。似乎是这样,因为许多 JPEG 文件不是标准的,尽管任何图形应用程序(Irfan、PSP、F
我尝试了很多事情,但是所有尝试都失败了。 我需要将灰度图像(2560x1440)调整为更低或更高的分辨率,然后我需要将边界设置为原始大小(2560x1440),但将调整后的图像保持在中心。 我使用的是
我正在使用 GLSulfaceView 开发一个静音相机应用程序,该应用程序从预览中捕获图片。 为了捕捉图片,我使用 GLES20.glReadPixels(0, 0, surfaceWidth, s
是否有相当于 yarn resolutions 的 npm功能? npm package.json docs 中没有提及它. 例如,我想在 3.3.2 上安装 lerna@3.3.2 及其依赖项之一
我制作了一个在 Arduino 上运行的 24x15 LED 显示屏,去年我在内存中放入了 32KB 的图形例程,这很酷。 但现在我已经升级到 Arduino Mega,具有 256KB 内存,并且有
我的场景是,我正在收集网络数据包,如果数据包与网络过滤器匹配,我想记录连续数据包之间的时间差,最后一部分是不起作用的部分。我的问题是,无论我使用什么 C 定时器函数,我都无法获得准确的亚秒级测量。我尝
我们一直在学校布置一项任务,需要更改图像(反转颜色、切换颜色、旋转 90 度、双倍大小、放大图像),现在我正在尝试通过将分辨率加倍来使其大小加倍,但无法弄清楚如何访问该地址并更改它。我们得到了两个函数
我是一名优秀的程序员,十分优秀!