开发OpenCV+Qt+C++项目过程中遇到的问题及查找的答案

来源:互联网 发布:淘宝网秋冬半身裙 编辑:程序博客网 时间:2024/06/05 19:08

--------------------------------------社区版登录后就可免费使用

教你如何解决VS201530天试用期已过即VS2015许可证已过期的问题-学习-工作生活-C++技术网  http://www.cjjjs.com/paper/gzsh/20151116103613163.aspx

 

studio 2015 key vs2015密钥 - keenweiwei的专栏- 博客频道- CSDN.NET  http://blog.csdn.net/keenweiwei/article/details/51473796

 

 

-------------------------------黄彦钊的LaserScanner配置OpenGL使用工程下边的lib就好

 

 

 

----------------------------------1.f

 

各位,1.f什么意思,不懂刚才看代码,里面出现一个公式beta = 1.f / (2 * beta/(4*img.cols*img.rows - 3*img.cols - 3*img.rows + 2) );

请问为什么是1.f,这是什么意思啊?我刚才实验一下,1.f1的效果都一样,那为什么要用1.f呢,求解?

 

------解决方案--------------------

楼主试试 float a = 1.f / 2; float a = 1 / 2; 就知道区别了。

 

------------------------------STL

 Standard Template Library,标准模板库

 

C++标准中,STL被组织为下面的17个头文件:<algorithm><deque><functional><iterator><array><vector><list><forward_list><map><unordered_map><memory><numeric><queue><set><unordered_set><stack><utility>

 

STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

​容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack><queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。

 

序列式容器

向量(vector) 连续存储的元素<vector>

链表(list) 由节点组成的双向链表,每个结点包含着一个元素<list>

双端队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque>

 

容器适配器

(stack) 后进先出的值的排列<stack>

队列(queue) 先进先出的值的排列<queue>

优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>

 

关联式容器

集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序<set>

多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>

映射(map) {键,值}对组成的集合,以某种作用于键对上的谓词排列<map>

多重映射(multimap) 允许键对有相等的次序的映射 <map>

 

迭代器部分主要由头文件<utility>,<iterator><memory>组成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

 

算法部分主要由头文件<algorithm><numeric><functional>组成。<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。<functional>中则定义了一些模板类,用以声明函数对象。

 

-----------------------------------------------map multimap

虽然 map multimap 具有相同的接口,其重要差别在于重复键,设计和使用要区别对待。此外,还要注意每个容器里insert()成员函数的细微差别。

 

-----------------------------------------------explicit显式

 

发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。

原则上应该在所有的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explicit,这样可以大大减少错误的发生。

 

--------------------------------------------QLCDNumber

QLCDNumber控件用于显示一个LCD数字。

1.首先我们构建一个QLCDNumber对象,并设置显示位数、外观、样式等效果。

2.然后,构建一个定时器,每隔一秒来定时刷新QLCDNumber中的内容。

3.获取当前日期时间,显示格式为:年--日 时::.毫秒。

 

--------------------------------------solve

求解线性系统或者最小二乘法问题

int cvSolve( const CvArr* src1, const CvArr* src2, CvArr* dst, int method=CV_LU );

src1

输入矩阵

src2

线性系统的右部

dst

输出解答

method

解决方法(矩阵求逆) :

CV_LU - 最佳主元选取的高斯消除法

CV_SVD - 奇异值分解法 (SVD)

CV_SVD_SYM - 对正定对称矩阵的 SVD方法

函数 cvSolve 解决线性系统或者最小二乘法问题 (后者用SVD 方法可以解决):

 

---------------------------------gemm

cvGEMM

double cvGEMM(

    const CvArr* src1

    const CvArr* src2

    double alpha

    const CvArr* src3

    double beta

    CvArr* dst

    int tABC = 0

)

广义矩阵乘法(generalized matrix multiplicatipmGEMM)OpenCV中是由cvGEMM()来实现的,可实现矩阵乘法、转置后相乘、比例缩放等。最常见的情况下,cvGEMM()计算如下:

 

其中ABC分别是矩阵src1src2src3,α和β是数值系数,op()是附在矩阵上的可选转置。参数src3可以设置为空。在这种情况下,不会参与计算。转置将由可选参数tABC来控制,它的值可以是0或者(通过布尔OR操作)CV_GEMM_A_TCV_GEMM_B_TCV_GEMM_C_T的任何组合(每一个标志都有一个矩阵转换相对应)

过去的OpenCV包含cvMatMul()cvMatMulAdd()方法,但是,它们很容易和cvMul()混淆,其实它们的功能是完全不一样的(即两个数组的元素与元素相乘)。这个函数以宏的形式继续存在,它们直接调用cvGEMM()。两者对应关系如表3-7所示。

3-7cvGEMM()一般用法的宏别名

cvMatMul(ABD)

cvGEMM(AB1NULL0D0)

cvMatMulAdd(ABCD)

cvGEMM(AB1C1D0)

只有大小符合约束的矩阵才能进行乘法运算,并且所有的数据类型都应该是浮点型。cvGEMM()函数支持双通道矩阵,在这种情况下,它将双通道视为一个复数的两个部分。

cvGetColcvGetCols

CvMat* cvGetCol(

    const CvArr* arr

    CvMat* submat

    int col

)

CvMat* cvGetCols(

    const CvArr* arr

    CvMat* submat

    int start_col

    int end_col

)

cvGetCol()函数被用作提取矩阵中的某一列,并把它以向量的形式返回(即只有一列的矩阵)。在这种情况下,矩阵指针submat将被修改为指向arr中的特定列,必须指出的是,该指针在修改过程中并未涉及内存的分配或数据的复制;submat的内容仅仅是作了简单修改以使它正确地指出arr中所选择的列。它支持所有数据类型。

cvGetCols()函数的工作原理与cvGetCols完全一致,区别只在于前者将选择从start_colend_col之间的所有列。这两个函数都返回一个与被调用的特定列或者多列(即,submat)相对应的头指针。

 

-------------------------------------------------------<>””

#include book.h

#include<iostream.h>

<>""表示编译器在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录,""是表示从当前目录开始搜索,然后是系统目录和PATH环境变量所列出的目录。

所以,系统头文件一般用<>,用户自己定义的则可以使用"",加快搜索速度。

 

----------------------------------------------------stdiostream

std是一个类(输入输出标准),它包括了cin成员和cout成员,“using name space std ;”以后才能使用它的成员。#include<iostream.h>中不存在类std,但是他有cin,out的相关函数,不需要使用命名空间了。而第二种标准#include<iostream>,它包含了一个类,在类的使用之前要预处理一下,“using namespace std;”就是这个功能,然后你就可以使用cin,cout这两个成员函数了,假设你不使用预处理(using namespace std;),麻烦加上std::cin或者std::cout再去使用它的成员函数(因为头文件中存在这个类)

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为stdnamespace中。

iostreamiostream.h的区别

前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因 此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout

 

--------------------------------------------- 计算2个操作的时间差

 

#include <QTime>

#include <QDebug>

...

QTime startTime = QTime::currentTime();

QTime endTime = QTime::currentTime();

qDebug() << startTime.msecsTo(endTime);    // 结果为ms

 

--------------------------------------------stack

 

stack 通常被实现为容器template < class T, class Container = deque<T> > class stack;

栈(Stack)是一个容器适配器(Container adaptor)类型,被特别设计用来运行于LIFOLast-in first-out)场景,在该场景中,只能从容器末尾添加(Insert)或提取(Extract)元素。

模板参数

ClassFoo 编辑于  07-28版本0评论0我来编辑

T

容器所包含的元素的类型。

在类模板内部,使用其别名为 value_type 的成员类型。

 

Container

底层的用于存储元素的容器的类型。适配器,即使用一个特定容器类的封装对象作为它的底层容器。stack提供了一系列成员函数用于操作它的元素,只能从容器“后面”压进(Push)元素或从容器“后面”提取(Pop)元素。容器中的“后面”位置也被称为“栈顶”。

用来实现栈的底层容器必须满足顺序容器的所有必要条件。同时,它还必须提供以下语义的成员函数:

 

back()

push_back()

pop_back()

满足上述条件的标准容器有 std::vectorstd::dequestd::list,如果未特别指定stack 的底层容器,标准容器std::deque 将被使用。

 

------------------------------------------------判断用户输入的字符串是否为回文

 *回文是指顺读和反读都一样的串

 

-------------------------------------------

Qtconsole applicationQtGUIapplication的区别

 

QCoreApplication

是控制台的Application

QApplication

是带窗口的Application

 

 

----------------------- QWidgetQDialogQMianWindows的区别QWidget是所有图形界面的基类

QMainWindow是一个提供了菜单、工具条的程序主窗口

QDialog是对话框、多用于短时间与用户的交互

QMainWindowQDialog都是QWidget的子类。

 

换种说法:

QWidget是控件

QDialog是对话框

QMainWindows是主窗体(非主窗体用QDialog

------------------------------------------------videoCapture一直提示未定义的标识符

我的OpenCV学习笔记(12):VideoCapture- thefutureisour的专栏- CSDN博客  http://blog.csdn.net/thefutureisour/article/details/7530344

看了下原版的发现是cv::

原来是using namespace cv没加上

 

---------------------------------------------------vs2015配置opencv3.2

VS2015配置opencv3.2.0 - Andy's blog - CSDN博客  http://blog.csdn.net/guguant/article/details/54356492

 

---------------------------------------slot没实现,moc文件报错

 

 

 

 

-------------未声明定义问题

#include<vector>  vector

#include<string>   string

using namespace std    NULL

Using namespace cv    vediocapture未声明

 

-=======================================VS2015更改项目名称步骤-

u012043391的专栏 -

 CSDN博客  http://blog.csdn.net/u012043391/article/details/73380547

阅读全文
0 0
原创粉丝点击