小编krz*_*ych的帖子

两组之间的转换

我有对象让我们说模型图像.我想计算模型图像上的对象和目标图像上的对象之间的变换(位移,缩放,旋转).我想假设对象可以被视为2D,因此只应计算2D变换.

首先,我想以手动辅助方式进行操作.用户在模型图像上选择基点,然后在目标图像上选择目标点.点数应由用户定义(但不低于最低2-3点).当点给出不同的信息时,应该对变换进行平均,并且例如由此可以计算匹配的质量.

所以问题是关于计算两组点的变换,但正如我想在图像上做的那样,我添加了图像处理标签.

特别欢迎使用一些代码或伪代码的参考和建议.

有两点是非常容易的问题,只应采用线的旋转,比例和位移,但如何用更多的点来做,并对其进行平均并计算一些质量因素.

目前的解决方案是

void transformFnc(std::vector<PointF> basePoints, std::vector<PointF> targetPoints,
                  PointF& offset, double rotation, double scale)
{
    std::vector<Line> basePointsLines;
    std::vector<Line> targetPointsLines;
    assert(basePoints.size() == targetPoints.size());
    int pointsNumber = basePoints.size();

    for(int i = 0; i < pointsNumber; i++)
    {
         for(int j = i + 1; j < pointsNumber; j++)
         {
             basePointsLines.push_back(Line(basePoints[i], basePoints[j]));
             targetPointsLines.push_back(Line(targetPoints[i], targetPoints[j]));
         }
    }
    std::vector<double> scalesVector;
    std::vector<double> rotationsVector;
    double baseCenterX = 0, baseCenterY = 0, targetCenterX = 0, targetCenterY = 0;
    for(std::vector<Line>::iterator it = basePointsLines.begin(), i = targetPointsLines.begin();
        it …
Run Code Online (Sandbox Code Playgroud)

algorithm geometry image-processing

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

OpenCV线拟合算法

我正在尝试了解OpenCV fitLine()算法.

这是来自OpenCV的代码片段: icvFitLine2Dfunction - icvFitLine2D

我看到有一些随机函数选择点进行近似,然后计算从点到拟合线的距离(选择点),然后选择其他点并尝试最小化距离并选择distType.

有人可以澄清从没有硬数学并假设没有伟大的统计知识的这一刻发生的事情吗?OpenCV代码注释和变量名称无助于我理解这段代码.

algorithm statistics opencv curve-fitting

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

低对比度图像分割

我有低对比度图像分割的问题.任务是找到表面缺陷.它们是可见的(缺陷总是暗区)但图像的对比度非常低.以下两个样本.

1 2

我尝试过增强对比度然后进行阈值处理:

Mat tmp1 = imread("C:\\framesRoi\\311.bmp",0);
stretchContrast(tmp1);
threshold(tmp1,tmp1,75,255,THRESH_BINARY);
Run Code Online (Sandbox Code Playgroud)

拉伸对比度的地方:

int minValue = 255, maxValue = 0;
const int l = sourceImg.cols * sourceImg.rows * sourceImg.channels();
if(sourceImg.isContinuous())
{
    uchar* ptr = sourceImg.ptr<uchar>(0);
    for(int i = 0; i < l; ++i)
    {
        if(ptr[i] < minValue)
        {
            minValue = ptr[i];
        }
        if(ptr[i] > maxValue)
        {
            maxValue = ptr[i];
        }
    }
}
cout<<"min: "<<minValue<<";"<<"max value: "<<maxValue<<endl;

const int  magicThreshold = 10;
if(sourceImg.isContinuous())
{
    uchar* ptr = sourceImg.ptr<uchar>(0);
    for(int i = 0; i < l; …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing computer-vision

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

QString :: number()'f'格式,不带尾随零

我想将数字转换为QString3位有效数字.

QString::number(myNumber,'f',3);
Run Code Online (Sandbox Code Playgroud)

做的工作但仍然落后零.没有它们如何使用它.

我也试过了'g',哪些不应该留下那些零:

QString::number(myNumber,'g',3);
Run Code Online (Sandbox Code Playgroud)

但是例如472.76被转换为473.这让我感到惊讶.为什么'g'选择这样呢?

但是我对'f'格式很感兴趣.所以主要的问题是如何在'f'没有尾随零的情况下完成它?

输入 - >所需的输出

472.76 - > 472.76

0.0766861 - > 0.077

180.00001 - > 180

c++ qstring qt

12
推荐指数
2
解决办法
8717
查看次数

为什么在从线程执行方法时使用QMetaObject :: invokeMethod

我有以下代码:

class A : public QObject
{
    Q_OBJECT
public:
    A() : QObject()
    {
         moveToThread(&t);
         t.start();
    }
    ~A()
    {
         t.quit();
         t.wait();
    }

    void doSomething()
    { 
         QMetaObject::invokeMethod(this,"doSomethingSlot");
    }
public slots:
    void doSomethingSlot()
    {
         //do something
         emit ready();
    }
signals:
    void ready();
private:
    QThread t;
}
Run Code Online (Sandbox Code Playgroud)

问题为什么doSomething必须通过它来调用QMetaObject::invokeMethod.我知道连接类型有一些东西.有人可以解释引擎盖下的内容吗?

c++ qt multithreading qthread

12
推荐指数
2
解决办法
3万
查看次数

轮廓匹配 - 找到轮廓位移

我在两个具有相同物体的图像上找到了轮廓,我想找到这个物体的位移和旋转.我已经与这个轮廓的旋转边框,然后它的角度和中心点,但包围盒旋转试过不告诉轮廓旋转正确,因为它是相同的角度A + 0,+ 90,A + 180等.度.找到轮廓的旋转和位移是否还有其他好的方法?也许有些使用凸壳,凸度缺陷?我在学习OpenCv中读过有关匹配轮廓的内容,但它没有帮助.有人会举一些例子吗?

//编辑:也许有一些方法可以使用类似于freeman链的东西吗?但我现在无法弄清楚算法.用序列点之间的角度制作链然后检查序列匹配是不行的...

opencv image-processing computer-vision

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

使用OpenCV fitEllipse()进行圆拟合

使用OpenCV fitEllipse进行圆拟合是否有效.fitEllipse()返回cv::RotatedRect平均宽度和高度以获得拟合圆半径的方法?

opencv curve-fitting

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

用于检查内存碎片的工具

我最近阅读了有关内存碎片的主题: 如何解决内存碎片什么是内存碎片?

我想在这些文章中看到一些内存分配图,例如作者http://pavlovdotnet.wordpress.com/2007/11/10/memory-fragmentation/

你可以推荐一些工具来获取这样的内存分配映射,这样我就可以看到内存是否碎片化以及可用的最大可用空间是多少.

我在Windows上,所以我更喜欢在这个系统上工作的工具.

memory profiling memory-management

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

几何图案质量和填充

在上图中有一些几何图案.模型a距离是已知的.点严格不在模型距离内.

我想要:

  • 计算每个点质量(点之间的实际距离不是a)更好的点适合模式更好的质量系数它应该有(我试图采取距离和45度角)
  • 消除错误点(我用红色标记它) - 它与模式质量计算有关

到目前为止我尝试过的:

  1. 互相取点
  2. 计算它们之间的距离和角度
  3. 只取与当前点相邻的点(距离在a - delta和之间)a + delta
  4. 质量是真实距离/ modelDistance*realAngle/modelAngle

失败的原因:

  • 良好的积分质​​量大大降低,附近的坏点
  • 如果坏点只有一个邻居,距离和角度都没问题,那么它的质量还可以.

所以问题是:在这种情况下,计算点质量的最佳算法什么,以及填充模式.应该通过考虑邻居位置的元素的平均位置来填充模式.最好的答案是伪代码或代码或对某些已知算法的引用,在这种情况下可能会有所帮助.

问题与我之前的问题有点相关,用点模式填充矩形,但填充不能用错误的质量点完成.

algorithm statistics computational-geometry

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

正确的Qt线程方式

我有耗时的图像加载(图像很大),加载时也会对其进行一些操作.我不想阻止应用程序GUI.

我的想法是在另一个线程中加载图像,发出加载图像的信号,然后用这个图像重绘视图.

我的方法:

void Window::loadImage()
{ 
    ImageLoader* loaderThread = new ImageLoader();
    connect(loaderThread,SIGNAL(imageLoaded()),this,SLOT(imageLoadingFinished());
    loaderThread->loadImage(m_image, m_imagesContainer, m_path);
}
void Window::imageLoadingFinished()
{
    m_imagesContainer->addImage(m_image);
    redrawView();
}

class ImageLoader : public QThread
{
    Q_OBJECT
    public:
       ImageLoader(QObject *parent = 0) : m_image(NULL), m_container(NULL)

       void loadImage(Image* img, Container* cont, std::string path)
       {
            m_image = img;
            m_container = cont;
            ...
            start();
       }
    signals:
       void imageLoaded();
    protected:
       void run()
       {
           //loading image and operations on it
           emit imageLoaded();
       }
    protected:
       Image* m_image;
       Container* m_container;
}
Run Code Online (Sandbox Code Playgroud)

我基于quedcustomtypeQt编写此代码的示例.当在stackoverflow中搜索和搜索时,我也发现子类化QThread …

c++ qt multithreading qthread

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