小编use*_*911的帖子

从给定点到给定椭圆的距离

我有一个椭圆,由中心点,radiusX和radiusY定义,我有一个Point.我想在椭圆上找到最接近给定点的点.在下图中,那将是S1.

graph1

现在我已经有了代码,但在其中的某个地方存在逻辑错误,我似乎无法找到它.我将问题分解为以下代码示例:

#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>

using namespace std;

void dostuff();

int main()
{
    dostuff();
    return 0;
}

typedef std::vector<cv::Point> vectorOfCvPoints;

void dostuff()
{

    const double ellipseCenterX = 250;
    const double ellipseCenterY = 250;
    const double ellipseRadiusX = 150;
    const double ellipseRadiusY = 100;

    vectorOfCvPoints datapoints;

    for (int i = 0; i < 360; i+=5)
    {
        double angle = i / 180.0 * CV_PI;
        double x = ellipseRadiusX * cos(angle);
        double y = ellipseRadiusY * sin(angle); …
Run Code Online (Sandbox Code Playgroud)

c++ math opencv ellipse

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

QObject::startTimer:定时器只能用于以 QThread 启动的线程

我正在尝试在工作线程的事件循环中启动计时器,但出现此错误: QObject::startTimer: Timers can only be used with threads started with QThread

这有什么问题?

#include <QObject>
#include <QThread>
#include <QTimer>

class A : public QObject
{
    Q_OBJECT
public:
    A();

private:
    QThread m_workerThread;
    QTimer m_myTimer;

};

A::A()
{
    this->moveToThread(&m_workerThread);
    m_myTimer.moveToThread(&m_workerThread);
    m_workerThread.start();
    m_myTimer.start(1000);
}
Run Code Online (Sandbox Code Playgroud)

qt qthread qtimer

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

显示连续的QImage流的有效方法

我目前正在使用QLabel来执行此操作,但这似乎很慢:

void Widget::sl_updateLiveStreamLabel(spImageHolder_t _imageHolderShPtr) //slot
{
    QImage * imgPtr = _imageHolderShPtr->getImagePtr();
    m_liveStreamLabel.setPixmap( QPixmap::fromImage(*imgPtr).scaled(this->size(), Qt::KeepAspectRatio, Qt::FastTransformation) );
    m_liveStreamLabel.adjustSize();
}
Run Code Online (Sandbox Code Playgroud)

在这里,我为到达的每个新图像生成一个新的QPixmap对象。由于QPixmap操作仅限于GUI线程,因此这也使GUI感觉响应较差。
我已经看到了关于此的一些讨论,其中大多数建议使用QGraphicsView或QGLWidget,但是我无法找到一个快速的示例来说明如何正确使用它们,这正是我所寻找的。
我将不胜感激。

qt

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

local_bh_disable、preempt_disable、local_irq_disable

local_bh_disable禁用对下半部分 (softirqs) 的处理。Softirq 在中断返回路径上处理,或者由 ksoftirqd-(per cpu)-thread 处理,如果系统遭受沉重的 softirq 负载,它将被唤醒。

preempt_disable禁用抢占,这意味着当线程在preempt_disable<->preemt_enable范围内执行时,它不会被调度程序置于睡眠状态。这意味着,如果在当前线程在该范围内时发生系统定时器中断,它可能会更新调度程序的会计表,但它不会将上下文切换到另一个线程。这包括软中断。

local_irq_disablelocal_irq_save禁用本地 cpu 的中断。这意味着本地 cpu 不会对任何 irq 做出反应,因此它不会运行任何中断返回路径,因此无法在那里运行软中断。

假设我的上述陈述是正确的(我不确定),那么在local_bh_disable您调用preempt_disableand local_irq_save(在进程上下文中)之后调用不是多余的吗?

multithreading linux-kernel interrupt-handling softirq

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

对象轮廓上的opencv角点检测

我有一个熔炼立方体的图像,随着时间的推移形成一个液滴.到目前为止,我提取了它的轮廓,但接下来我需要区分物体和表面.我的想法是检测物体接触表面的角落,但我很难找到一个合理的方法如何这样做(最好使用opencv的c ++接口).我很感激任何建议.
以下是提取轮廓的一些示例:
1 2 3 4

编辑:@Haris:

我试过你的建议的一个变种,它正在为我做的工作:

R1 R2 R2

在近似轮廓i中,从左侧接近,查找具有指定范围内的值的第一个角度,然后从右侧查找相同的角度.由于近似轮廓点是原始轮廓点的子集,然后我识别原始序列中的2个角点,并在两个角处切割它.中间部分我作为液滴,左右部分,我重新定位为我的表面线.可能有更好,更稳定的方法,但这对我有用.谢谢!

c++ opencv image-processing

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

QTimer线程亲和性

在文档中它说:

在多线程应用程序中,您可以QTimer在任何具有事件循环的线程中使用。要从非 GUI 线程启动事件循环,请使用 QThread::exec(). Qt 使用计时器的线程关联来确定哪个线程将发出信号timeout()。因此,您必须在其线程中启动和停止计时器;不可能从另一个线程启动计时器。

因此,当我有一个QTimer对象时,Qt 使用该对象(或其父级)的线程亲和力来确定哪个线程将发出信号timeout()。但是,当我使用不需要实例的
静态成员函数时,会发生什么情况,哪个线程会发出超时信号呢?singleShot(..)QTimer

qt

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

在静态成员数组定义中使用sizeof运算符

为什么我得到这个:

error: invalid application of 'sizeof' to incomplete type 'A'
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时:

class A
{
  int m_i;
  static char m_j[sizeof(A)];
};
Run Code Online (Sandbox Code Playgroud)

我假设在这种情况下很明显sizeof(A)将是sizeof(int).但我的编译器似乎并不这么认为.

c++ c++98

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