计算机视觉OpenCV的学习与探究

本文介绍了计算机视觉的概念,以及OpenCV这一强大的图像处理库。内容涵盖OpenCV的基本功能,如图像处理、视频分析、特征提取和机器学习等。通过示例展示了如何使用OpenCV进行图像取样、傅里叶变换、图像滤波和高斯模糊等操作。此外,还提及了高斯金字塔的降采样过程。
摘要由CSDN通过智能技术生成

什么是计算机视觉与OpenCV?

计算机视觉

计算机视觉是一门研究如何使机器“看”的科学,指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。因为感知可以看作是从感官信号中提 取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。

OpenCV
开发源代码的计算机视觉类库OpenCV(Inter Open Source ComputerVision Library)由英特尔公司开发,它是一套可免费获得的由一些C函数和C++类所组成的库,用来实现一些常用的图像处理及计算机视觉算法。OpenCV主要用于对图像进行一些高级处理,比如说特征检测与追踪、运动分析、目标分割与识别以及3D重建等。
OpenCV是Inter公司开发的图像处理和计算机视觉函数库,它有以下几个特点:开发C源码,基于Inter处理器指令集开发的优化代码,统一的结构和功能定义,强大的图像和矩阵运算能力,方便灵活的用户接口,同时支持WINDOWS,LINUX平台等。

OpenCV能做什么?

  1. 内置数据结构和输入/输出(In-build data structures and input/output)
  2. 图像处理操作(Image processing operations)
  3. 构建图形用户界面(Build GUI)
  4. 视频分析(Video analysis)
  5. 3D重建(3D reconstruction)
  6. 特征提取(Feature extraction)
  7. 目标检测(Object detection)
  8. 机器学习(Machine learning)
  9. 计算摄影(Computational photography)
  10. 形状分析(Shape analysis)
  11. 光流算法(Optical flow algorithms)
  12. 人脸和目标识别(Face and object recognition)
  13. 表面匹配(Surface matching)
  14. 文本检测和识别(Text detection and recognition)

图像的取样

将图像写入文件,可使用 imwrite()函数,该函数的声明如下:

bool imwrite(const string& filename, InputArray image,const vector<int>& params=vector<int>())

下面例程展示了如何读入一副图像,然后对图像进行 Canny 边缘操作,最后
将结果保存到图像文件中。

#include <iostream>
    #include "opencv2/opencv.hpp"
    using namespace std;
    using namespace cv;
    int main(int argc, char* argv[])
    {
   
    
    //读入图像,并将之转为单通道图像
    Mat im = imread("lena.jpg", 0);
    //请一定检查是否成功读图
    if( im.empty() )
    {
   
    cout << "Can not load image." << endl;
    return -1;
    }
    //进行 Canny 操作,并将结果存于 result
    Mat result;
    Canny(im, result, 50, 150);
    //保存结果
    imwrite("lena-canny.png", result);
    return 0;
    }

将 lena.jpg 文件放在当前目录,运行该例程后,lena-canny.png 将会出现在当前目录。lena-canny.png 图像如图所示,是 lena.jpg 的边缘提取结果。

在这里插入图片描述

迭代器

迭代器可以方便地遍历所有元素。

#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
   
Mat grayim(600, 800, CV_8UC1);
Mat colorim(600, 800, CV_8UC3);
//遍历所有像素,并设置像素值
MatIterator_<uchar> grayit, grayend;
for(  grayit  =  grayim.begin<uchar>(),  grayend  = grayim.end<uchar>()
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值