【学习OpenCV】

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。

图像的初级操作

1.图像的表示

在计算机看来,一副图像只是一堆亮度各异的点。一副尺寸为M×N的图像可以用一个M×N
的矩阵来表示,矩阵元素的值表示这个位置上的像素的亮度,一般来说像素值越大表示该点越亮。
一般来说,灰度图用二维矩阵表示
这里写图片描述
彩色(多通道)图像用三维矩阵(M×N×3)表示,RGB图像的通道顺序为BGR
这里写图片描述

2.Mat类

Mat类能够自动管理内存,不需要我们手动开辟空间,也不需要立即释放空间。
Mat类由矩阵头和指向存储所有像素值的矩阵指针构成。
Mat类表示一个n维的密集数值单通道或多通道数组,可用于存储实数或复数值的向量和矩阵、灰度或彩色图像等。

Mat类代码

class CV_EXPORTS Mat
{
    public:
    int flags; // 标志位
    int dims;  // 数组的维数
    int rows, cols  // 行与列的数量
    uchar  *data;  // 指向数据的指针
    int  * refcount; // 指针的引用计数器 
}

Mat 类创建
Mat img; // 创建无初始化矩阵
Mat img1(20,10,CV_8UC1); // 创建20行10列类型为8位的单通道矩阵
Mat img2(Size(20,10),CV_8UC3); // 创建大小为20*10类型为8位的三通道矩阵
Mat img3(20,10,CV_8UC3,Scalar(0,255,0)); // 创建10*20的8位三通道矩阵
Mat img4(20,10,CV_8UC1,Scalar(255)); // 创建大小为10*20的8位单通道矩阵
Mat img5(img4); // img4赋值给img5,共享数据对象

Mat 类赋值拷贝
Mat img(100,200,CV_8UC3,Scalar(0,255,0));
Mat img2(img);//和原图像指向同一个数据块
Mat img3=img;//和原图像指向同一个数据块

Mat img4=img.clone(); //原图像的副本
Mat img 5;
img.copyTo(img5); // 原图像的副本

3.图像显示

代码如下:

#include <opencv2\opencv.hpp>
#include <opencv2\imgproc.hpp>
using namespace cv;

int main()
{
    // 读入一张图片  
    Mat img = imread("E:\\图片\\03.jpg");
    // 创建一个名为"图片"窗口  
    namedWindow("图片");
    // 在窗口中显示游戏原画  
    imshow("图片", img);
    // 一直显示 
    waitKey(0);
}

这里写图片描述

4.模糊操作

#include <opencv2\opencv.hpp>
#include <opencv2\imgproc.hpp>
using namespace cv;

int main()
{
    // 载入原始图  
    Mat img = imread("E:\\图片\\03.jpg");

    // 创建一个名为 "游戏原画"窗口  
    namedWindow("游戏原画");

    // 在窗口中显示游戏原画  
    imshow("游戏原画", img);

    // 模糊操作
    Mat dstImage;
    blur(img, dstImage, Size(15, 15));

    imshow("模糊操作", dstImage);
    // 让图片一直显示 
    waitKey(0);
}

这里写图片描述

5.边缘检测

#include <opencv2\opencv.hpp>
#include <opencv2\imgproc.hpp>
using namespace cv;

int main()
{
    // 载入原始图  
    Mat img = imread("E:\\图片\\02.jpg");

    // 创建一个名为 "游戏原画"窗口  
    namedWindow("游戏原画");

    // 在窗口中显示游戏原画  
    imshow("游戏原画", img);
    Mat dstImage,edge,grayImage;
    dstImage.create(img.size(), img.type());
    // 将原图变为灰度图片
    cvtColor(img, grayImage, COLOR_BGR2GRAY);
    // 降噪
    blur(grayImage,edge,Size(5,5));
    // 运行Canny算子
    Canny(edge, edge, 3, 9, 3);
    // 显示
    imshow("边缘检测", edge);
    // 让图片一直显示 
    waitKey(0);
}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值