小编Ale*_*pus的帖子

获取指向对象成员函数的指针

这是问题所在:

1)我有一个这样的课:

class some_class
{
public:
    some_type some_value;
    int some_function(double *a, double *b, int c, int d, void *e);
};
Run Code Online (Sandbox Code Playgroud)

2)在里面some_function,我使用some_valuessome_class对象得到一个结果.

3)所以,我有一个具体的对象,我想得到一个指向这个对象的指针some_function.

可能吗?我无法使用,some_fcn_ptr因为此函数的结果取决于some_value对象的具体情况.

如何获得指向some_function对象的指针?谢谢.

typedef  int (Some_class::*some_fcn_ptr)(double*, double*, int, int, void*);
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers member

29
推荐指数
4
解决办法
5万
查看次数

使用光流进行OpenCV跟踪

我使用它作为我的跟踪算法的基础.

    //1. detect the features
    cv::goodFeaturesToTrack(gray_prev, // the image 
    features,   // the output detected features
    max_count,  // the maximum number of features 
    qlevel,     // quality level
    minDist);   // min distance between two features

    // 2. track features
    cv::calcOpticalFlowPyrLK(
    gray_prev, gray, // 2 consecutive images
    points_prev, // input point positions in first im
    points_cur, // output point positions in the 2nd
    status,    // tracking success
    err);      // tracking error
Run Code Online (Sandbox Code Playgroud)

cv::calcOpticalFlowPyrLK将前一图像中的点矢量作为输入,并在下一图像上返回适当的点.假设我在前一个图像上有随机像素(x,y),如何使用OpenCV光流功能计算下一个图像上该像素的位置?

c++ opencv tracking computer-vision

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

地址,reinterpret_cast和多重继承

任何人都可以解释以下代码的行为吗?

  1. 为什么我们b = 3在第一种情况下,即是真b2 == &d的?
  2. 为什么在案例2中没问题?我打印了b2和的地址d,它们是不同的.
#include <iostream>

using namespace std;

class A
{
public:
    A() : m_i(0) { }

protected:
    int m_i;
};

class B
{
public:
    B() : m_d(0.0) { }

protected:
    double m_d;
};

class C
    : public A
    , public B
{
public:
    C() : m_c('a') { }

private:
    char m_c;
};

int main()
{
    C d;
    B *b2 = &d;

    cout << &d << endl;
    cout …
Run Code Online (Sandbox Code Playgroud)

c++ pointers multiple-inheritance reinterpret-cast

9
推荐指数
1
解决办法
1823
查看次数

为什么地址消毒剂对bss全局溢出不起作用?

我做了什么.

测试1

  1 #include <stdio.h>                                                              
  2                                                                                 
  3 int test[16];                                                                   
  4                                                                                 
  5 int main()                                                                      
  6 {                                                                               
  7     test[17] = -1;                                                              
  8 } 

/tmp $ gcc ./main.c -o main -fsanitize=address
/tmp $ ./main 
/tmp $
Run Code Online (Sandbox Code Playgroud)

TEST2

  1 #include <stdio.h>                                                              
  2                                                                                 
  3 int test[16] = {1};                                                             
  4                                                                                 
  5 int main()                                                                      
  6 {                                                                               
  7     test[17] = -1;                                                              
  8 }

 /tmp $ gcc ./main.c -o main -fsanitize=address
 /tmp $ ./main 

=================================================================
==19776==ERROR: AddressSanitizer: global-buffer-overflow on address 
...
Run Code Online (Sandbox Code Playgroud)

看起来全局缓冲区溢出检测不适用于放在bss中的全局变量(是这样吗?).这背后的原因是什么?

更新:

存储的代码没有优化.系统信息:

$ gcc --version
gcc (Ubuntu …
Run Code Online (Sandbox Code Playgroud)

c memory-management buffer-overflow address-sanitizer

9
推荐指数
1
解决办法
428
查看次数

在图像上找到十字架

我有一组二进制图像,我需要在其上找到十字架(附带示例).我使用findcontours从二进制图像中提取边框.但我无法理解我怎样才能确定这个形状(边界)是否交叉?也许opencv有一些内置方法,可以帮助解决这个问题.我想用机器学习来解决这个问题,但我认为有一种更简单的方法可以做到这一点.谢谢!

交叉二进制图像

交叉二进制图像2

algorithm opencv image-processing

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

ARM GCC生成函数序言

我提到ARM工具链可以生成不同的函数序言.实际上,我看到了两个完全不同的功能序言的obj文件(vmlinux):

第一种情况看起来像:

push {some registers maybe, fp, lr} (lr ommited in leaf function)
Run Code Online (Sandbox Code Playgroud)

第二种情况如下:

push {some registers maybe, fp, sp, lr, pc} (i can confuse the order)
Run Code Online (Sandbox Code Playgroud)

所以当我看到第二个推动额外的pc和sp.此外,我在崩溃实用程序(kdump项目)中看到了一些注释,其中内核堆栈框架应该具有格式{...,fp,sp,lr,pc}让我更加困惑的是,因为我看到在某些情况下它不是真正.

1.)我是否正确需要一些gcc额外的标志来推动额外的pc和sp在功能prolog?如果是的话他们是什么?

2.)这用于什么?基本上,据我所知,我可以只用FP和LR展开堆栈,为什么我需要这个额外的值?

3.)如果这个东西没有编译标志 - 我怎么能强制生成这个扩展函数prolog,又是什么目的?

谢谢.

c assembly stack gcc arm

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

Opencv级联火车时间

我使用opencv_traincascade进行训练,使用以下参数

opencv_traincascade -data cascade_model -vec ..\create_template\pos_vec_file -bg ..\BG\bg.txt -featureType LBP -w 32 -h 32 -numPos 5000 -numNeg 10000

我试图提供更多内存1024 Mb(默认为256),但在这种情况下我有内存分配错误.所以问题是在第一个训练阶段没问题,但是在第12阶段,第13阶段等等,每个阶段需要8个小时.在列车过程中,我有10-15%的处理器活动.我在opencv lib中有TBB二进制文件,但我不确定我的PC是否使用它.我怎么能告诉PC,我想整合培训过程中的所有PC资源?谢谢. 训练过程中的处理器和内存活动

performance opencv tbb computer-vision

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

如何强制 tesseract 不使用 TESSDATA_PREFIX

我在我的电脑上安装了 tesseract,它定义了 TESSDATA_PREFIX 环境变量。完全卸载tesseract后,我尝试以这种方式使用tesseract API:

if (myOCR->Init("C:/Projects/project/Release/tessdata/", "rus")) {
            fprintf(stderr, "Could not initialize tesseract.\n");
            exit(1);
        }
Run Code Online (Sandbox Code Playgroud)

并收到

Error opening data file C:\Program Files (x86)\Tesseract-OCR\tessdata/rus.traine
ddata
Please make sure the TESSDATA_PREFIX environment variable is set to the parent d
irectory of your "tessdata" directory.
Failed loading language 'rus'
Tesseract couldn't load any languages!
Could not initialize tesseract.
Run Code Online (Sandbox Code Playgroud)

在 cmd 中输入 set TESSDATA_PREFIX 告诉我没有这样的变量。但是tesseract记得它(不知道如何)。那么如何强制 tesseract 在具体文件夹中搜索 traindata 呢?谢谢

c++ ocr tesseract

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

使用Linux虚拟鼠标驱动

我正在尝试根据Essential Linux device Drivers一书实现虚拟鼠标驱动程序。有一个用户空间应用程序,它生成坐标以及一个内核模块。

请参阅:虚拟鼠标驱动程序和用户空间应用程序代码以及如何使用此驱动程序的分步说明。

1.) 我编译用户空间应用程序和驱动程序的代码。

2.)接下来我检查了dmesg输出并得到了,

输入:未指定的设备为 /class/input/input32
虚拟鼠标驱动程序已初始化

3.) sysfs节点在初始化期间正确创建(参见/sys/devices/platform/vms/coordinates

4.)通过检查以下内容,我知道虚拟鼠标驱动程序 ( input32 ) 已链接到event5 :

$ cat /proc/bus/input/devices
I: 总线=0000 供应商=0000 产品=0000 版本=0000
N: 名称=""
P: Phys=
S: Sysfs=/devices/virtual/input/input32
U: Uniq=
H:处理程序=事件5
B:EV=5
B:REL=3

5.) 接下来我将GPM服务器附加到事件接口:gpm -m /dev/input/event5 -t evdev

6.) 运行用户空间应用程序以生成虚拟鼠标的随机坐标并使用 观察生成的坐标od -x /dev/input/event5

但什么也没发生。为什么?另外,作者在这里提到gdm应该使用/etc/init.d/gdm stop来停止,但是在停止时我得到 …

linux mouse mouseevent linux-device-driver linux-kernel

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

GPIO irq:下降沿和上升沿检测

我尝试为基于 TI am335x SoC 的电路板创建裸机应用程序。我需要做的一件事是callback1在上升沿和callback2下降沿调用。从我发现的数据表中,可以通过写入1 << pinRISINGDETECT 和 FALLINGDETECT GPIO 寄存器来启用对上升沿和下降沿的同时检测。但是,我不明白(在数据表中没有看到它的迹象),我如何确定当前出现的中断是由 GPIO 的上升沿还是下降沿引起的?

embedded arm irq omap gpio

3
推荐指数
1
解决办法
1181
查看次数