一 . opencv是什么及其作用?

  OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法(百度百科)。

  鉴于本人的工作环境主要是采用python作为开发工具,故本篇博客是基于python来做的学习记录。

二 . 环境依赖和opencv包

  •   环境:python3.7+windows10
  •   包:opencv-python、opencv-contrib-python
  •   说明:装好python以后,直接在cmd里面使用pip install 即可,若遇见下载速度过慢或超时的情况,建议换个pip源,使用方式如:pip install package -i  https://pypi.tuna.tsinghua.edu.cn/simple/

三 . 基本使用

  前提:准备若干张图片到本地

                                          

  都知道一张图片是由很多个像素点组成,对于计算机而言,最终呈现在用户面前的是由每个像素点的值所决定(0~255),0对应黑色,255对应白色。我们在生活中通常接触的都是彩色图片,由RGB三通道共同构成一张上面的彩色图片,每一个通道对应的像素值反映出其亮度(三个通道可以理解成三个矩阵)。而灰度图像通常只有一个颜色通道来表现。

1. 读取图片,将其转换为数组

from matplotlib import pyplot as pyl
import cv2
import numpy img = cv2.imread("cat.jpg") #img是一个numpy.ndarray对象,默认是以BGR三通道读取图片数据(三维数组)
#img_gray = cv2.imread("cat.jpg",cv2.IMREAD_GRAYSCALE) 以灰度图像方式读取图片数据(二维数组)

2. 数组数据转换

img_BGR = cv2.imread("cat.jpg")
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将其转换为灰度的二维数组数据

3. 数组数据窗口展示

img = cv2.imread("cat.jpg")

cv2.imshow("IMage",img)
cv2.waitKey(0) # 按任意键关闭窗口,cv2.waitKey(1000) 延时一秒关闭窗口
cv2.destroyAllWindows()

4. 图像保存

cv2.imwrite("mycat.jpg",img)

5. 图像的截取

# 其实本质就是对np数组进行操作
img = cv2.imread("cat.jpg")
cv2.imshow("IMage",img[:100,:200]) # 取前100行,前200列的像素作为图像展示

6. BGR数据切片

img = cv2.imread("cat.jpg")

# 切片
b,g,r = cv2.split(img) # 得到各自颜色通道的二维数组数据 # 合并
img = cv2.merge(b,g,r)

7 同样大小的数组像素值运算

img = cv2.imread("cat.jpg")
img_2 = numpy.copy(img) # np相加,像素值只要超过255,就减掉255,比如257,结果就为2
print(img[:3,:3,0]+img_2[:3,:3,0] ) # cv2相加,像素值超过255,就等于255
print(cv2.add(img[:3,:3,0],img_2[:3,:3,0]))

8 图片的融合

img_cat = cv2.imread("cat.jpg")
img_dog = cv2.imread("dog.jpg") ret = cv2.addWeighted(img_cat,0.2,img_dog,0.8,0) # 数据后面的值决定图片融合和所占的权重
cv2.imshow("IMage",ret)
cv2.waitKey(0) # 按任意键关闭窗口,cv2.waitKey(1000) 延时一秒关闭窗口
cv2.destroyAllWindows() # 如果图片大小不一致,使用cv2.resize(img_xx,(300,200)) ————》转换为np.shape = 200,300的数组

9 图片的比例缩放

img_cat = cv2.imread("cat.jpg")

ret = cv2.resize(img_cat,(0,0),fx=3,fy=1) #横向拉长三倍
ret2 = cv2.resize(img_cat,(0,0),fx=3,fy=3) #图片扩大三倍

结语:本来准备认真写一下结尾的,毕竟作为博客园的新人,写下第一篇学习笔记应当是值得纪念的一件事儿,不过想了想,这要是最后一篇那岂不是太尴尬了。嗯,作为一名不太合格的码农,我大多时候是很抗拒写笔记的,其实毕业工作也已经一年多了,一直也来也都知道一个好的学习习惯是多么重要。所以,我希望自己能改变的更快一点,能变得更加优秀,更加有底气的去尝试,去做自己觉得有意义真正想去做的事情。

                     —— 2019-09-10 00:14:45  

  

opencv——基础篇的更多相关文章

  1. OpenCV基础篇之读取显示图片

    程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...

  2. OpenCV基础篇之画图及RNG随机数对象

    程序及分析 /* * FileName : random_gen.c * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 29 ...

  3. OpenCV基础篇之查找表

    程序及分析 /* * FileName : lookup_table.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Su ...

  4. OpenCV基础篇之像素操作对照度调节

    程序及分析 /* * FileName : contrast.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 29 ...

  5. 什么是图像 -- opencv基础

    opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像: ...

  6. opencv 61篇

    (一)--安装配置.第一个程序 标签: imagebuildincludeinputpathcmd 2011-10-21 16:16 41132人阅读 评论(50) 收藏 举报  分类: OpenCV ...

  7. OpenCV图像处理篇之边缘检测算子

    OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...

  8. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  9. C#多线程之基础篇3

    在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...

随机推荐

  1. 使用maven插件反向映射generatorConfig.xml生成代码

    一.配置Maven pom.xml 文件 <!-- 反向映射 --> <plugin> <groupId>org.mybatis.generator</gro ...

  2. ES6十大特性(转载CSDN)

    1. const和let关键字 const用于定义常量. let用于定义变量.但是JavaScript中不是已经有变量了吗? 是的,这很正确,但用var声明的变量具有函数作用域,并会被提升到顶部. 这 ...

  3. The 2019 Asia Nanchang First Round Online Programming Contest(B,E)

    B. Fire-Fighting Hero 题意:一个消防员和多个队伍比赛,比较所有地方的最短路的最大值,消防员最后的值要乘1/C,求胜利的一方的最短路的最大值是多少.一直没读懂正确题意(内疚). 思 ...

  4. 常用内置模块(二)——logging模块

    logging模块 一.logging作用 1. 控制日志级别  2. 控制日志格式  3. 控制输出的目标为文件 二.日志级别 logging.debug( logging.info( loggin ...

  5. NIO 源码分析(02-1) BIO 源码分析

    目录 一.BIO 最简使用姿势 二.ServerSocket 源码分析 2.1 相关类图 2.2 主要属性 2.3 构造函数 2.4 bind 方法 2.5 accept 方法 2.6 总结 NIO ...

  6. D3.js 动画 过渡效果 (V3版本)

    一 . 过渡的启动   启动过渡效果,与以下四个方法相关:   d3.transition([selection],[name]) //创建一个过渡对象.但是由于每个选择集中都有transition( ...

  7. GCloud SDK 遇到的错误记录

    eclipse 环境 1.调用 SetAppInfo 方法返回 -1 语音id 和 key 设置正确 ,各种检测都没问题 解决办法 把安卓工程目录下 obj 文件价删除 ,把sdk 替换成以前能用的老 ...

  8. 内网端口转发[SSH]

    一.应用场景 获取到目标边界机器linux服务器一台,想继而向内网其他机器渗透,获取到一台webshell发现处于内网当中且不通外网.可以通过linux ssh隧道对目标内网机器进行访问. 二.利用手 ...

  9. 从零开始搭建系统1.4——MySql安装及配置

    安装环境:CentOS7 64位 ,安装MySQL5.7 1.创建mysql目录 2.在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo ...

  10. linux常用命令-3文件与目录相关命令

    cd .. #返回上一级目录 cd ../.. #返回上两级目录 cd - #返回上次所在目录 cp file1 file2 #将file1复制为file2 cp -a dir1 dir2 #复制一个 ...