小编krz*_*ych的帖子

cv :: Mat to QImage转换

我发现了一个非常类似的话题:如何将opencv cv :: Mat转换为qimage,但它并没有解决我的问题.

我有功能将cv :: Mat转换为QImage

QImage cvMatToQImg(cv::Mat& mat)
{
    cv::Mat rgb;
    if(mat.channels()==1)
    {
        cv::cvtColor(mat,rgb,CV_GRAY2BGR);
        cv::cvtColor(rgb,rgb,CV_BGR2BGRA);
        QImage temp = QImage((unsigned char*)(rgb.data), rgb.cols, 
                              rgb.rows,QImage::Format_ARGB32 );

        QImage returnImage = temp.copy();
        return returnImage;
}
Run Code Online (Sandbox Code Playgroud)

它适用于我,但我想让它更有效率.第一:为什么更改2个cvtColor函数:

cv::cvtColor(mat,rgb,CV_GRAY2BGRA)
Run Code Online (Sandbox Code Playgroud)

失败了

QImage returnImage = temp.copy() 
Run Code Online (Sandbox Code Playgroud)

与segfault.

那么如何消除QImage的复制.当我简单地返回临时图像时,我会遇到段错误.

那里可以做任何其他优化吗?它经常被使用,所以我希望尽可能快地使用它.

qt opencv

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

在Windows上使用Qt Creator设置ccache

我正试图在Windows上的Qt Creator中设置ccache.

不幸的是,我找不到任何好的指示.如何让它工作?

我在Cygwin上安装了ccache.

编辑:

我试过添加

QMAKE_CXX+="ccache g++"
Run Code Online (Sandbox Code Playgroud)

作为qmake构建步骤中的附加参数.

但是在编译输出中,我仍然有"g ++ -c -g -Wall ...",我想它应该是"ccache g ++ ..."

c++ qt qt-creator ccache

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

与Open Cv的相位相关

我想计算OpenCV中函数的相位相关性.我找到了http://nashruddin.com/phase-correlation-function-in-opencv.html但是有一些其他的库,我想用OpenCV来做.

我的问题是不同的,因为我想计算两个数组的相位相关,两个360元素.我试图从文档中评估如何做,但我不知道我的方法是否良好.我的R矩阵没有规范化,如何规范化它是否有必要?如果你给我一些例子,我将不胜感激.我执行此任务的功能:

void calcPhaseCorrelation(int* x1, int* x2){
    Mat array1 = Mat(1,360,DataType<float>::type); 
    Mat array2 = Mat(1,360,DataType<float>::type);

    uchar* begin = array1.data;
    uchar* end = begin + (array1.step.p[0]/ sizeof(float)) * array1.size().height;
    uchar *ptr = begin;

    int ctr1 = 0, ctr2 = 0; //control in loops
    while(ptr<end)
    {
       *ptr = (float)x1[ctr1];
       ctr1++;
       ptr++;
    }

    begin = array2.data;
    end = begin + (array2.step.p[0]/ sizeof(float)) * array2.size().height;
    ptr = begin;
    while(ptr<end)
    {
        *ptr = x2[ctr2];
        ctr2++;
        ptr++;
    }

    Mat outputArray;
    outputArray.create(abs(array1.rows - array2.rows)+1, 
        abs(array1.cols …
Run Code Online (Sandbox Code Playgroud)

opencv signal-processing image-processing

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

矢量内存管理

对于函数中使用的所有临时向量使用一个向量类成员,从内存管理站点看起来有什么区别:

class A
{
   private:
   vector<Type> m_vector;
}

void fnc()
{
   m_vector.clear();
   m_vector.push_back();
   //further operations on vector
}
Run Code Online (Sandbox Code Playgroud)

并在函数内创建临时向量:

void fnc()
{
    vector<Type> vector;
    //further operations on vector
}
Run Code Online (Sandbox Code Playgroud)

我认为第一个选项导致较少的内存碎片,因为我们正在进行一次分配并使用此区域,在第二种情况下,我们为不同函数的向量分配内存,这会导致内存碎片.

这个向量用法的优点和缺点是什么?当我的课程在其功能中需要很多向量时,我应该使用哪一个?从记忆管理网站看哪一个更好看?

c++ vector

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

矢量分裂/移位元素

我有 std::vector<type> myVector

让我们说内容是:

el1, el2, el3, splitElement, el4,el5
Run Code Online (Sandbox Code Playgroud)

我分裂splitElementsplit1split2 我想有载体:

split2, el4, el5, el1, el2, el3, split1
Run Code Online (Sandbox Code Playgroud)

Split2应该是开始,split1结束.其他元素顺序应该与示例相同.让我们将矢量视为链.我想插入两个元素和移位链来制作split2第一个元素.使用stl实现它的优雅有效方法是什么?

我现在的快速代码(这是非常难看的解决方案):

std::vector<type> before;
std::vector<type> after;
bool afterBool = false;
for(std::vector<type>::iterator it = myVector.begin(); it != myVector.end(); it++)
{
     if(*it == splitElement)
     {
          afterBool = true;
          before.push_back(split1);
          after.push_back(split2);
     }
     else if(afterBool)
          after.push_back(*it);
     else
          before.push_back(*it);
}
myVector.clear();
for(std::vector<type>::iterator it = after.begin(); it != after.end(); it++)
     myVector.push_back(*it);
for(std::vector<type>::iterator it = before.begin(); it != before.end(); it++)
     myVector.push_back(*it);
Run Code Online (Sandbox Code Playgroud)

我添加它只是因为我不想在没有任何代码的情况下离开主题.

如何做得很好?

c++ refactoring stl vector

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

简单的解析器和生成器

我需要从c ++对象解析并生成一些文本.

语法是:

command #param #param #param
Run Code Online (Sandbox Code Playgroud)

有一组命令,其中一些没有参数等.参数主要是数字.

问题是:我应该使用Boost Spirit来完成这项任务吗?或者只是简单地将每行评估函数标记为从字符串比较命令,读取其他参数并从中创建cpp对象?

如果你建议使用Spirit或任何其他解决方案,如果你能提供一些与我的问题类似的例子,那将是很好的.我已阅读并尝试了Boost Spirit doc中的所有示例.

c++ parsing tokenize boost-spirit

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