OpenCV函数的学习(持续更新。。。)

一、OpenCV Mat
一边做项目一边在学习,学习到啥,就写啥,慢慢更新。
1.(1)Mat数据类型指针ptr的使用

cv::Mat image = cv::Mat(400, 600, CV_8UC1); //宽400,长600 
uchar * data00 = image.ptr<uchar>(0); 	// 指向image第一行第一个元素的指针
uchar * data10 = image.ptr<uchar>(1); 	// 指向image第二行第一个元素的指针
uchar * data01 = image.ptr<uchar>(0)[1];  // 指向image第一行第二个元素的指针

(2)Mat数据类型指针at的使用,访问矩阵元素
Mat::at(int i0, int i1)
2.读取图片

IplImage* src = cvLoadImage("/home/aibc/wallpaper/desktopwallpaper/001.jpg",1);
IplImage* img_rgb=cvLoadImage("/home/aibc/wallpaper/desktopwallpaper/001.jpg");
// flags = -1 --> decode ;flags = 0 --> garyImg ;flags = 1 --> RGBimg
Mat img = cv::imread("/home/aibc/Wen/yolo_uav/test2/data/t3/495.jpg", 0);

3.打印错误流

   if(img.empty())
    {
        fprintf(stderr,"can not load image\n");
        return -1;
    }

在这里插入图片描述
4.显示图片

cvNamedWindow("kernal",CV_WINDOW_AUTOSIZE);	//CV_WINDOW_AUTOSIZE窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小
resizeWindow("kernal", 640, 480);	// 图片不会跟着缩放,只是显示框变大
imshow("kernal",schmid);

图片一起缩放的办法:

cvNamedWindow("kernal",WINDOW_NORMAL);	//WINDOW_NORMAL用户便可以改变窗口的大小(没有限制)
resizeWindow("kernal", 640, 480);
imshow("kernal",schmid);

WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制);
INDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小;
WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

5.Mat <–> IplImg的相互转换

Mat -> IplImg

Mat img = cv::imread("/home/aibc/Wen/yolo_uav/test2/data/t3/495.jpg", 0);
IplImage *src;
* src = IplImage(img);
error:Segmentation fault (core dumped)

修正:
深拷贝

// Mat -> IplImag
IplImage imgTmp = bgrImg;
IplImage *src = cvCloneImage(&imgTmp);

浅拷贝

//注意:浅拷贝 - 同样只是创建图像头,而没有复制数据
Mat M;
IplImage img = M;
IplImage img = IplImage(M);

IplImg - > Mat

//使用Mat的构造函数:Mat::Mat(const IplImage* img, bool copyData=false);    默认情况下copyData为false
IplImage* srcImg = cvLoadImage("Lena.jpg");

//注意:以下三种效果一致,均为浅拷贝

Mat M(srcImg);
Mat M(srcImg, false);
Mat M = srcImg;

//注意:当将参数copyData设为true后,则为深拷贝(复制整个图像数据)

Mat M(srcImg, true);

REF:https://www.cnblogs.com/Key-Ky/p/4150531.html

6.运算符
(.)点运算符:
下面的代码把值 “zara” 赋给对象 emp 的 first_name 成员:strcpy(emp.first_name, “zara”);
(->)箭头运算符:
如果 p_emp 是一个指针,指向类型为 Employee 的对象,则要把值 “zara” 赋给对象 emp 的 first_name 成员,需要编写如下代码:strcpy(p_emp->first_name, “zara”);

7.*(指针),&(取地址),()(函数调用),->(成员访问),,(逗号),
.:成员访问运算符
., ->:成员指针访问运算符
:::域运算符
sizeof:长度运算符
?::条件运算符
#: 预处理符号

8.虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接。
调用函数 area() 被编译器设置为基类中的版本,这就是所谓的静态多态,或静态链接。函数调用在程序执行前就准备好了

9.标准输出流(cout): cout << "Value of str is : " << str << endl;
标准输入流(cin) : cout << "请输入您的名称: ";
标准错误流(cerr): cerr << "Error message : " << str << endl;
标准日志流(clog): clog << "Error message : " << str << endl;

10.文件和流 http://www.runoob.com/cplusplus/cpp-files-streams.html

11.strcmp:C/C++函数,比较两个字符串
设这两个字符串为str1,str2, 若str1==str2,则返回零; 若str1 > str2,则返回正数; 若str1< str2,则返回负数。
特别注意:strcmp(const char s1,const char s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
strncmp:
strncmp函数是指定比较size个字符。也就是说,如果字符串s1与s2的前size个字符相同,函数返回值为0。此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则依次比较str1和str2的前n位,设i(i< n)为两字符串首次的不同位,则返回(str1[i]-str2[i])。 提示:该函数区分大小写。

*12.C 库函数 void calloc(size_t nitems, size_t size) 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
void *calloc(size_t nitems, size_t size) //nitems – 要被分配的元素个数。 size – 元素的大小。
返回值:该函数返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。

13.fprintf函数
作用:格式化输出到一个流/文件中;

7.cv2.VideoCapture(0)
(1)、cap = cv2.VideoCapture(0)
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“…/test.avi”)
(2)、ret,frame = cap.read()
cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
(3)、cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,
参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。
c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键是if条件句成立
(4)、调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。
8.cvtcolor()
该函数是一个颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间转换。也可以转换为灰度图。
void cv::cvtColor(cv::InputArray src, // 输入图
cv::OutputArray dst, // 输出图
int code, // 颜色映射类型,可以查表得到,有很多
int dstCn = 0 // 输出的通道数 (0=‘automatic’),我们可以使用默认值,什么都不写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值