Open CV学习

这篇博客主要介绍了OpenCV的基础知识,包括头文件的引用、常用函数的使用,如imread、imshow、GaussianBlur、pyrUp、pyrDown、cvtColor、Canny边缘检测等。此外,还详细讲解了OpenCV中不同的数据类型,如uchar、Mat类、Vec类以及各种矩阵和容器类的用法。
摘要由CSDN通过智能技术生成

学习记录

学习原因是一门课程的考核要求:实现5*5的字符识别,建议使用C语言。

一. 头文件及基础函数调用

#include <opencv2/opencv.hpp>

调用OpenCV函数,需要在每个函数前加上cv::
为了避免,使用
using namespace cv;

1.1 入门函数

1. imread

imread函数//

如:
Mat imp=imread(const string,int flag)//参数1为要打卡的文件位置,2为标志位用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关

2. 数据类型

cv::Mat//自带结构

3. namewindow与imshow

cv::namewindow("窗口名称",窗口设置)//新建一个屏幕上的窗口
cv::imshow("窗口名称",窗口显示的mat变量)//在屏幕上显示窗口

使用范例:打开一个窗口显示文件

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>


using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    Mat img=imread("文件位置",1);
    namedWindow("example",WINDOW_AUTOSIZE);
    imshow("example", img);
    waitKey(0);
    destroyWindow("example");
    return 0;
}



4. GaussianBlur
加上高斯模糊:
在这里插入图片描述
变化代码:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>


using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    Mat img=imread("图片位置",1);
    namedWindow("example",WINDOW_AUTOSIZE);
    namedWindow("example2",WINDOW_AUTOSIZE);

    imshow("example", img);
    Mat out;
    GaussianBlur(img, out, Size(5,5), 3,3);
    GaussianBlur(out, out, Size(5,5), 3,3);
    imshow("example2", out);
    waitKey(0);
    destroyWindow("example");
    destroyWindow("example2");
    return 0;
}

5. pyrUp和pyrDown来实现图像金字塔功能

6. cvtColor()
cvtColor()函数用于实现图像的色彩空间转换,一般包括四个参数,
cvtColor(src,dst,type,channels);
即源图像,目标图像,转换方,目标图像通道数

7. Canny边缘检测
包括
1.图像降噪
2.计算图像梯度
3.非极大值抑制
4.阈值筛选

例子:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>


using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    Mat img_rgb,img_gry,img_cny,img_pyr,img_pyr2;
    
    namedWindow("natrue",WINDOW_AUTOSIZE);
    namedWindow("gray",WINDOW_AUTOSIZE);
    namedWindow("canny",WINDOW_AUTOSIZE);

    img_rgb=imread("文件位置",1);
    imshow("natrue", img_rgb);

    cvtColor(img_rgb, img_gry, COLOR_BGR2BGRA);
    imshow("gray", img_gry);
    
    Canny(img_gry, img_cny, 10, 100,3,true);
    imshow("canny", img_cny);
    
    waitKey(0);
    
    return 0;
}

在这里插入图片描述

8. 数据类型

uchar: unsigned char,无符号字符,数值范围为0~255。
Mat类中的data成员是一个unsigned char *,指向数据的第一个字节。

cv::Vex<>:容器类、固定向量类
Vec2i:两个元素的int型向量
Vec4d:四个元素的double型向量
Vec3b:可以看作是vector<uchar, 3>:是一个uchar类型的,长度为3的vector向量。
b:unsigned char
w:unsigned short
s:short
由于在OpenCV中,使用imread读取到的Mat图像数据,都是用uchar类型的数据存储,对于RGB三通道的图像,每个点的数据都是一个Vec3b类型的数据。使用at定位方法如下:
img.at(row, col)[0] = 255;  // 这是指修改B通道数据
img.at(row, col)[1] = 255;  // 这是指修改G通道数据
img.at(row, col)[2] = 255;  // 这是指修改R通道数据

cv::Matx<行数,列数,数据类型>: 固定矩阵类
cv::Point: 容器,成员x,y
cv::Scalar:
cv::Size: 两个成员,width和height
cv::Rect: 矩形类,包含point类xy(矩形左上角)及size类width和height(矩形大小)
cv::Ptr: 智能指针
……

二、矩阵操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值