Opencv常见用法和常见错误(一)
来源:互联网 发布:变脸软件有哪些 编辑:程序博客网 时间:2024/06/05 18:35
一. 读取中文的路径的图像
使用Opencv错误的读法如下:
int main() { Mat img = imread("E:\示例图片/1.jpg"); namedWindow("实例"); imshow("实例",img); waitKey(); }
将会产生如下错误
正确的读法如下:
在读取图像的时候加入两个头文件:
#include <QString>#include <qdebug.h>int main(){ Mat img = imread(string(QString("E:\示例图 片/1.jpg").toLocal8Bit())); namedWindow(string(QString("实例").toLocal8Bit())); imshow(string(QString("实例").toLocal8Bit()),img); waitKey();}
可以得到结果图:
二. 申请一个全1或者全0矩阵
Mat mat=Mat::ones(2,4,CV_64FC1);Mat mat=Mat::zeros(2,4,CV_64FC1);
三. 矩阵的点乘和叉乘
double a[] = {1, 2, 3, 4, 5, 6, 7, 8};double b[] = {8, 7, 6, 5 ,4, 3, 2, 1};Mat Ma = Mat(2, 4, CV_64FC1, a);Mat Mb = Mat(2, 4, CV_64FC1, b);Mat Mc = Ma.mul(Mb);
点乘
double a[] = {1, 2, 3, 4, 5, 6, 7, 8}; double b[] = {8, 7, 6, 5 ,4, 3, 2, 1}; Mat Ma = Mat(2, 4, CV_64FC1, a); Mat Mb = Mat(2, 4, CV_64FC1, b); Mat Mb_transpose = Ma.t(); // 对Mb取转置 Mat Mc = Ma * Mb_transpose ;
三. 求矩阵的行或列的最大值、最小值、平均值、和
cvReduce( const CvArr* src, CvArr* dst, int dim, int op=CV_REDUCE_SUM);
src
输入矩阵
dst
输出的通过处理输入矩阵的所有行/列而得到的单行/列向量
dim
矩阵被简化后的维数索引.0意味着矩阵被处理成一行,1意味着矩阵被处理成为一列
op
简化操作的方式,可以有以下几种取值:
CV_REDUCE_SUM-输出是矩阵的所有行/列的和.
CV_REDUCE_AVG-输出是矩阵的所有行/列的平均向量.
CV_REDUCE_MAX-输出是矩阵的所有行/列的最大值.
CV_REDUCE_MIN-输出是矩阵的所有行/列的最小值.
i.求每一列的总和
double a[] = {1, 5, 6, 3, 2, 6, 7, 2}; Mat dst; Mat Ma = Mat(2, 4, CV_64FC1, a); reduce(Ma,dst,0,CV_REDUCE_SUM);
ii.求每一列的总和
double a[] = {1, 5, 6, 3, 2, 6, 7, 2}; Mat dst; Mat Ma = Mat(2, 4, CV_64FC1, a); reduce(Ma,dst,0,CV_REDUCE_AVG);
iii.求每一列的总和
double a[] = {1, 5, 6, 3, 2, 6, 7, 2}; Mat dst; Mat Ma = Mat(2, 4, CV_64FC1, a); reduce(Ma,dst,0,CV_REDUCE_SUM);
iv.求每一列的总和
double a[] = {1, 5, 6, 3, 2, 6, 7, 2}; Mat dst; Mat Ma = Mat(2, 4, CV_64FC1, a); reduce(Ma,dst,0,CV_REDUCE_AVG);
四. 矩阵求逆
invert(const CvArr* src, CvArr *dst, CV_SVD);
//CV_LU : 高斯消去法 (LU 分解)
//CV_SVD : 奇异值分解(SVD)
//CV_SVD_SYM : 对称矩阵的SVD
double a[] = {2, 0, 0, 2}; Mat dst; Mat Ma = Mat(2, 2, CV_64FC1, a); invert(Ma, dst, CV_SVD);
五. 把原矩阵某行或者某列赋值给新矩阵
void copyTo( OutputArray m ) const;
double a[] = {2, 0, 0, 2}; Mat dst; Mat Ma = Mat(2, 2, CV_64FC1, a); Ma.row(1).copyTo(dst);
六. 点除
void divide(double scale, InputArray src2, OutputArray dst, int dtype=-1);
double a[] = {2, 0, 0, 2}; Mat dst; Mat Ma = Mat(2, 2, CV_64FC1, a); divide(Ma,Ma,dst,1);
七. 矩阵求行列式
void divide(double scale, InputArray src2, OutputArray dst, int dtype=-1);
double a[] = {2, 0, 0, 2}; Mat Ma = Mat(2, 2, CV_64FC1, a); double dst = determinant(Ma);
八. 读取目录下连续的文件名
QDir dir("E:/Vtami/face/face/");dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);dir.setSorting(QDir::Size | QDir::Reversed);QFileInfoList list = dir.entryInfoList();cout<<list.size()<<endl;QFileInfo fileInfo = list.at(1);QString s;s.append(fileInfo.filePath());qDebug()<<s<<endl;Mat img = imread(string(QString(s).toLocal8Bit()));cout<<img<<endl;
内蒙大草原
- Opencv常见用法和常见错误(一)
- Opencv常见用法和常见错误(一)
- OPENCV常见错误(一)
- openCV常见错误
- opencv常见错误
- opencv常见编译错误
- opencv常见错误
- Opencv常见错误整理
- Android常见错误(一)
- 框架常见错误(一)
- javaweb---常见错误(一)
- 常见ORA错误(一)
- 指针的常见用法和错误总结
- C# 常见用法错误
- KVO底层探索和遇到的常见错误(一)
- Ftp上传常见错误和解决方法一
- QT常见错误一
- WebService 常见错误一
- eclipse点击后出现exit code=13
- 马拦过河卒
- Codeforces 3C
- 小白学开发(iOS)OC_new方法原理(2015-07-29)
- android Socket 编程
- Opencv常见用法和常见错误(一)
- java:IO流学习小结
- python生成式生成器
- 数据结构一:企业级顺序存储底层库封装
- SharePoint 2013 调查问卷的用法
- C语言获取系统时间的方法
- c#操作xml
- Datatables 定制化配置方法以及对常用操作的二次封装
- Android Fragment 你应该知道的一切