此笔记针对 Python 版本的 opencv3,c++ 版本的函数和 python 版本的函数参数几乎一样,只是矩阵格式从 ndarray 类型变成适合 c++ 的 mat 模板类型。注意,因为 python 版本的opncv只提供接口没有实现,故函数原型还是来自 c++版本的opencv,但是参数解释中的数据类型还是和 python 保持一致。

图像的载入:imread() 函数

函数原型:

Mat imread(const sting& filename, int flags=None)

参数解释:

  • filename:图像的文件路径,sting 字符串类型
  • flags:载入标识,以何种方式读取图片,int 类型的 flags。常用取值解释如下:
    • flags = 0:始终将图像转成灰度图再返回
    • flags = 1:始终将图像转换成彩色图再返回,如果读取的是灰度图,则其返回的矩阵 shape 将变为 (height, width, 3)
    • flags = 2:如果载入的图像深度为 16 位或者 32 位,就返回对应深度的图像,否则,就转换为 8 位图像再返回。

总结:读取文件中的图片到 OpenCV 中,返回 Mat 或者 ndarray 类型的矩阵,以彩色模式载入图像时,解码后的图像会默认以 BGR 的通道顺序进行存储。

cv2.imread()函数:

python-opencv 库的 imread 函数的 flags 参数取值方式与 C++ 版有所区别。使用函数 cv2.imread() 读入图像,图像要么在此程序的工作路径,要么函数参数指定了完整路径,第二个参数是要告诉函数应该如何读取这幅图片,取值如下:

  • cv2.IMREAD_COLOR : 取值 1,读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
  • cv2.IMREAD_GRAYSCALE : 取值 0,以灰度模式读入图像。
  • cv2.IMREAD_UNCHANGED : 取值 -1,读入一幅图像,并且包括图像的 alpha 通道。

Instead of these three flags, you can simply pass integers 1, 0 or -1 respectively.

import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)

opencv-python 库的读取图像函数 cv2.imread() 官方定义如下图。

图像的显示:imshow()函数

函数原型:

void imshow(const string &winname, InputArray mat)

参数解释:

  • winname:需要显示的窗口标识名称,string 字符串类型
  • mat:需要显示的图像矩阵,ndarray numpy 矩阵类型

总结:imshow 函数用于在指定的窗口显示图像,窗口会自动调整为图像大小。

minMaxLoc 函数

函数 cv :: minMaxLoc 查找最小和最大元素值及其位置,返回的位置坐标是先列号,后行号(列号,行号) 。在整个数组中搜索极值,或者如果mask不是空数组,则在指定的数组区域中搜索极值。(只适合单通道矩阵)。函数原型:

CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,
CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,
CV_OUT Point* maxLoc = 0, InputArray mask = noArray());

函数参数解释:

  • src:input single-channel array.
  • minVal:pointer to the returned minimum value; NULL is used if not required.
  • maxVal:pointer to the returned maximum value; NULL is used if not required.
  • minLoc:pointer to the returned minimum location (in 2D case); NULL is used if not required.
  • maxLoc:pointer to the returned maximum location (in 2D case); NULL is used if not required.

位深度的概念

  • 灰度图的位深度是 16,则其矩阵的元素类型为 uint16 ,彩色图其位深度一般是 24 ,红色占 8 个位、蓝色占 8 个位、绿色占 8 个位,其矩阵的元素类型为 uint8
  • 位分辨率( Bit Resolution )又称色彩深度、色深或位深度,在位图图像或视频视频缓冲区,指一个像素中,每个颜色分量(Red、Green、Blue、Alpha 通道)的比特数。
  • matplotlib.image.imsave 将灰度图的矩阵保存为图像格式时,其默认保存的图像通道数为 4RGBA,其中 RGB 三个通道对应的二维矩阵数值完全一样。

OpenCV3 图像处理笔记的更多相关文章

  1. opencv3 图像处理(一)图像缩放( python与c++ 实现)

    opencv3 图像处理 之 图像缩放( python与c++实现 ) 一. 主要函数介绍 1) 图像大小变换 Resize () 原型: void Resize(const CvArr* src,C ...

  2. 【图像处理笔记】SIFT算法原理与源码分析

    [图像处理笔记]总目录 0 引言 特征提取就是从图像中提取显著并且具有可区分性和可匹配性的点结构.常见的点结构一般为图像内容中的角点.交叉点.闭合区域中心点等具有一定物理结构的点,而提取点结构的一般思 ...

  3. 数字图像处理笔记与体会(一)——matlab编程基础

    最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了. 复习一下: 1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示 ...

  4. 图像处理笔记(二十一):halcon在图像处理中的运用

    概要: 分水岭算法做图像分割 二维码识别 稍后将其他几篇笔记全都补充上概要方便查询. 分水岭算法做图像分割 使用距离变换结合分水岭算法实现图像分割,可以用来分割仅通过阈值分割还是有边缘连接在一起的情况 ...

  5. C#图像处理笔记

    1.灰度拉伸 灰度拉伸又叫对比度拉伸,它是最基本的一种灰度变换,使用的是最简单的分段线性变换函数,它的主要思想是提高图像处理时灰度级的动态范围.

  6. laravel 的 intervention-image 图像处理笔记

    安装: https://blog.csdn.net/beyond__devil/article/details/62230610 需求: PHP >= 5.4 Fileinfo 扩展 GD库 & ...

  7. OpenCV3学习笔记

    http://blog.csdn.net/u010429424/article/details/73691001 http://blog.csdn.net/zhaoxfxy/article/detai ...

  8. OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )

    转自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函数介绍 1) 图像大小变换 cvResize () 原型: voidcvResize(co ...

  9. opencv3 学习笔记(二)

    1.OpenCv 颜色追踪 import cv2import numpy as npcap=cv2.VideoCapture(0)cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1 ...

  10. opencv3 学习笔记(一)

    1.cv2.imread(path,cv2.IMREAD_ANYCOLOR) IMREAD_ANYCOLOR=4(全彩模式)/IMREAD_GRAYSCALE=0(灰度模式)2.cv2.imwrite ...

随机推荐

  1. docker 常用工具

    windows 下常常需要linux环境 直接安装虚拟机不方便也浪费资源 所以直接在docker下安装一个centos 然后搭建好开发环境就是个不错的办法 一.Linux 环境 1.安装centos ...

  2. js map方法处理返回数据,获取指定数据简写方法

    map方法处理返回数据,获取指定数据简写方法 前言 后端返回数据为数组列表时,通常比较全面,包含了很多不需要的数据,可以通过 map 方法处理返回数据,筛选出想要的数据 例如 // 返回数据 res ...

  3. 《重学Java设计模式》笔记——建造者模式

    1. 建造者模式可以解决什么问题 我家里有各种形状的瓷器,盘子或者碗.虽然形状不同,但是所用的材料基本上是一样的,比如土.水.釉.彩这些基本的东西. 但是做不同款式的瓷器,方法是不同的.假如说我现在已 ...

  4. Atcoder ABC296 F

    Atcoder ABC296 F F - Simultaneous Swap 链接: F - Simultaneous Swap (atcoder.jp) 简要题意: 问题陈述 给你两个 \(N\) ...

  5. 微信小程序--云开发支付闭环

    云开发支付流程闭环 extends 微信小程序--使用云开发完成支付闭环 在上述文章中,我们对支付结果的处理更多依赖于小程序端的操作 订单号存储在小程序端 支付结果采用小程序端定时触发器轮询 现在我对 ...

  6. python之re库,正则表达

    一.前言 为什么要学re库呢?这里主要学他的正则表达,在编写安全脚本的时候肯定要遇到一些不规则的匹配规则,当然编写爬虫也少不了正则匹配去找到一些具有特殊特征的字符串.因此这是十分必要的,然而.re库使 ...

  7. sql 查询表数据

    SELECT s.Name AS SchemaName, t.Name AS TableName, p.rows AS RowCounts--, --CAST(ROUND((SUM(a.used_pa ...

  8. 小tips:HTML5的ruby标签实现给汉字加拼音、details标签实现折叠面板、原生进度条progress和度量meter

    ruby标签实现给汉字加拼音 ruby 元素由一个或多个字符(需要一个解释/发音)和一个提供该信息的 rt 元素组成,还包括可选的 rp 元素,定义当浏览器不支持 "ruby" 元 ...

  9. TypeScript – Decorator 装饰器

    前言 TypeScript 5.0 之后就可以使用正真的 JS Decorator 了, 从前 experiment 的版本依然可用, 但是不建议继续用, 因为差很远, 一起用会混乱. Decorat ...

  10. 系统编程-进程-先后fork或open一个文件的区别

    关联博文: 当文件操作遇上fork Linux内核的文件结构体 struct file { ......... struct path f_path; //文件的路径 #define f_dentry ...