小编Hyn*_*rix的帖子

OpenCV:如何使用掩码参数进行特征点检测(SURF)

我想将SurfFeatureDetector限制为一组区域(掩码).对于测试,我只定义一个掩码:

Mat srcImage; //RGB source image
Mat mask = Mat::zeros(srcImage.size(), srcImage.type());
Mat roi(mask, cv::Rect(10,10,100,100));
roi = Scalar(255, 255, 255);
SurfFeatureDetector detector();
std::vector<KeyPoint> keypoints;
detector.detect(srcImage, keypoints, roi); // crash
//detector.detect(srcImage, keypoints); // does not crash
Run Code Online (Sandbox Code Playgroud)

当我通过"roi"作为掩码时,我得到了这个错误:

OpenCV Error: Assertion failed (mask.empty() || (mask.type() == CV_8UC1 && mask.size() == image.size())) in detect, file /Users/ux/Downloads/OpenCV-iOS/OpenCV-iOS/../opencv-svn/modules/features2d/src/detectors.cpp, line 63
Run Code Online (Sandbox Code Playgroud)

这有什么问题?如何正确地将掩码传递给SurfFeatureDetector的"detect"方法?

问候,

c++ opencv roi surf feature-detection

7
推荐指数
1
解决办法
2万
查看次数

使用宏动态创建函数名称

我正在尝试创建一个宏(C/C++)来动态创建一个函数.基本上我有一个函数,其名称在"MyClassA"部分中有所不同.争论也应该通过宏定义来传递.然后在函数中有一个变量方法调用,例如"methodForClassA",再次使用一组变量的参数.

void Java_somepackage_MyClassA_fixMethod(int arg1, int arg2) {
Toolbox.methodForClassA(arg1, arg2);
}
Run Code Online (Sandbox Code Playgroud)

这种模式有40多种功能.当然我可以手动或用脚本创建它们.但是用宏来做这个也有可能吗?比如像这样的东西(不起作用):

# define MACRO_TEST(classname, methodname, args, argsMethod) void Java_somepackage_##classname_fixMethod(##args) {\
    Toolbox.##methodname(##argsMethod);\
} 
MACRO_TEST(MyClassA, methodForClassA, args1, args2)
Run Code Online (Sandbox Code Playgroud)

经过一些实验和阅读文档,我只能找到如何创建"动态"函数名称的模式,其中"("跟在动态部分之后:

#define FUNCTION(name, x) int func_##name() { return x;}
FUNCTION(test, 2);
Run Code Online (Sandbox Code Playgroud)

问候,

c macros precompile

6
推荐指数
1
解决办法
5884
查看次数

适用于Windows Phone 8的MP4/h264解码库

我正在为Windows Phone 8寻找一个mp4/h264解码器,它允许我访问解码的视频帧数据(在I/P/B帧处理之后).Afaik Windows Phone 8本身不提供访问已解码的h264数据以进行进一步处理的方法.

你能推荐一个优先用C/C++编写的库,是独立于平台的,可以在WP8上编译吗?我们欢迎免费和商业建议.

问候,

c++ mp4 decoder h.264 windows-phone-8

6
推荐指数
1
解决办法
1153
查看次数

页面呈现/加载所有组件时的事件

我有一个由子组件组成的 Qml 组件。加载(渲染)完所有内容后,我想执行一些操作。有没有办法找出所有组件何时加载?仅Component.onCompleted在根元素上使用事件是不够的,因为不能保证加载子元素。

问候,

qt qml qt5 qtquick2

6
推荐指数
1
解决办法
2175
查看次数

Q_PROPERTY 必须是 Qt 6 中完全定义的错误

使用 Qt 5 可以使用如下代码:

// Test.h
#include <QObject>
#include <QMetaObject>

class LanguageModel;

class Test : public QObject
{
    Q_OBJECT
    Q_PROPERTY(LanguageModel*, ...)
public:
};


// Test.cpp
#include "Test.h"
#include "LanguageModel.h"



// LanguageModel.h
#include <QObject>
#include <QMetaObject>

class LanguageModel : public QObject
{
    Q_OBJECT
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试将项目转换为 Qt 6,但上面的代码在生成的“debug\moc_Test.cpp”文件中失败,并显示以下错误消息:

C:\Qt\6.1.0\msvc2019_64\include\QtCore\qmetatype.h:778: error: C2338: Type argument of Q_PROPERTY or Q_DECLARE_METATYPE(T*) must be fully defined
Run Code Online (Sandbox Code Playgroud)

用直接头包含替换类前向定义是有效的:

// Test.h
#include <QObject>
#include <QMetaObject>

#include "LanguageModel.h" //class LanguageModel;

class Test : public QObject
{
    Q_OBJECT
    Q_PROPERTY(LanguageModel*, ...)
public: …
Run Code Online (Sandbox Code Playgroud)

c++ qt qt6

6
推荐指数
2
解决办法
1649
查看次数

基于GPU的拉普拉斯金字塔

我已经实现了一种使用普通C++进行无缝混合的图像混合方法.现在我想将此代码转换为GPU(使用OpenGL ES 2着色器用于移动设备).基本上,该方法为每个图像创建高斯和拉普拉斯金字塔,然后从低分辨率到顶部组合(另见文章"拉普拉斯金字塔作为紧凑图像代码",来自Burt等,1983).

我的问题是拉普拉斯金字塔等级可以有负值,但我的设备不支持浮点或整数类型纹理(例如使用ORB_texture_float扩展).

我已经找过处理基于GPU的金字塔的文章,但没有找到真正有用的东西.

  1. 如何有效地为GPU实现这样的金字塔?
  2. 是否有可能在不迭代前面的水平的情况下计算高斯/拉普拉斯金字塔等级?

问候,

编辑 好像没有"好"的方法来完全在GPU上计算拉普拉斯金字塔,除了使用两个通道(一个用于符号,一个用于值),它们不支持任何一种签名类型(例如ARB_texture_float)或大于当图像的数据范围在[0..255]之间时的字节.我的拉普拉斯金字塔在具有ARB_texture_float扩展的GPU上完美运行但没有扩展(并且一些调整以压缩范围)金字塔由于范围压缩而变得"错误".

shader image-processing gaussian opengl-es-2.0 laplacian

5
推荐指数
1
解决办法
1593
查看次数

macOS 权利音频输入与麦克风

对于 macOS 沙箱,有两个授权密钥:

com.apple.security.device.audio-input
com.apple.security.device.microphone
Run Code Online (Sandbox Code Playgroud)

我测试了两者,都允许麦克风输入。

它们之间有什么区别?

macos audio-recording entitlements mac-app-store appstore-sandbox

5
推荐指数
1
解决办法
1841
查看次数

将文件从 iOS 11 Files 应用程序复制到沙箱

我想将文件从 iOS 11 Files 应用程序复制到我的本地应用程序沙箱。出于测试目的,假设文件在“文件”应用程序中本地可用(从 iCloud 下载到本地存储)。文件扩展名已在我的应用程序中注册,当在“文件”应用程序中按下文件时,我的应用程序会从“文件”应用程序接收文件 URL:

NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];

NSURL *nsUrl; // comes from Files app. For instance "file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/test.rar"
NSURL *targetUrl; // file in my app's document directory

NSError *coordinatorError = nil;
[fileCoordinator coordinateReadingItemAtURL:nsUrl options:NSFileCoordinatorReadingWithoutChanges error:&coordinatorError byAccessor:^(NSURL *newURL) 
{   
    NSFileManager *fileManager = [NSFileManager defaultManager];
    //if ([fileManager fileExistsAtPath: [nsUrl path]])
    {
        NSLog(@"Copy from %@ to %@", newURL, targetUrl);

        NSError *copyError = nil;
        [fileManager copyItemAtURL:newURL toURL:targetUrl error:&copyError];
        if (!copyError)
        {
            // OK
        }
        else
        {
            NSLog(@"Files app …
Run Code Online (Sandbox Code Playgroud)

objective-c ios files-app

4
推荐指数
1
解决办法
7714
查看次数

OpenCV:对不同的图像大小使用单应性

我使用OpenCV的findHomography计算图像的单应矩阵,然后使用warpPerspective函数对图像进行扭曲.现在我想对图像的缩放版本使用相同的单应矩阵(缩放版本具有相同的宽高比,并且图像围绕其中心缩放).问题类似于" opencv update单应矩阵以适合尺寸加倍的图像 ",这似乎没有正确的答案.

是否可以将比例因子应用于现有的单应矩阵?

问候

opencv image-processing homography image-scaling

2
推荐指数
1
解决办法
2084
查看次数

使用StreamSocket挂起正确接收数据

我使用a StreamSocketListener来接收HTTP POST客户端发送的Windows Phone 8(充当服务器)上的数据.我可以接收数据,但是当读取所有数据时,DataReader.LoadAsync()方法会挂起,直到我手动取消客户端的连接:

_streamSocket = new StreamSocketListener();
_streamSocket.ConnectionReceived += _streamSocket_ConnectionReceived;
await _streamSocket.BindServiceNameAsync("30000");


private async void _streamSocket_ConnectionReceived(StreamSocketListener sender,
        StreamSocketListenerConnectionReceivedEventArgs args)
{
    using (IInputStream inStream = args.Socket.InputStream)
    {
        DataReader reader = new DataReader(inStream);
        reader.InputStreamOptions = InputStreamOptions.Partial;

        do
        {
            numReadBytes = await reader.LoadAsync(1 << 20);  // "Hangs" when all data is read until the client cancels the connection, e.g. numReadBytes == 0
            System.Diagnostics.Debug.WriteLine("Read: " + numReadBytes);

            // Process data
            if (numReadBytes > 0)
            {
                byte[] tmpBuf = new …
Run Code Online (Sandbox Code Playgroud)

c# sockets tcp windows-phone-8

2
推荐指数
1
解决办法
1557
查看次数