数字图像处理 OpenCV 快速入门

OpenCV(C++),OpenCV(Python),MATALAB,三种工具如何选择?

【转载】OpenCV(C++ 与 Python 的比较)与 MATLAB 的比较

我们经常会为自己的技能选择合适工具而感到疑惑。

工具能够帮助你锻炼技能,但它们并不能使你成为一位能者(Craftsman)。

真正的能者并不与工具产生挂钩,而是自身的技能。能者,在他们的口袋中往往会拥有许多不同的工具。另外,他们还能明智地挑选一个合适的工具去完成自己的工作。

作为一名入门者,建议走一条阻碍最少的道路并选择一个你熟悉的工具。


OpenCV教程,系统性学习

OpenCV官方教程中文版(For Python)

开发手册(函数查询手册)

OpenCV函数库查询手册(python)
python:opencv开发手册

一、Windows下Opencv-Python环境的配置

方法一:直接在cmd命令行中输入pip install opencv-python

最简单粗暴,这样会直接默认安装最新版本(目前已经是4.1.1了。。)

方法二:官网下载安装文件

教程:
https://blog.csdn.net/qq_41671751/article/details/88144281
https://blog.csdn.net/lsforever/article/details/82844116

官网链接:
https://opencv.org/#

选择相应的版本下载

直接打开exe安装

二、openCV基本操作

5分钟学会,使用opencv进行基本的图像操作—读、写、显示、缩放、裁剪(python语言)

1.图片读取

cv2.imread()
原型:imread(filename,flags=None)
作用:读取图像
参数:
filename,字符串,读取图片的工作路径。
flags,读取标志位。
1(cv2.IMREAD_COLOR):读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
0(cv2.IMREAD_GRAYSCALE):以灰度模式读入图像
-1(cv2.IMREAD_UNCHANGED):读入一幅图像,并且包括图像的 alpha 通道

OpenCV 读进来的图片是一个 numpy 矩阵,彩图的维度是高度、宽度、通道数(height,width,channels,HWC),灰度图的维度是高度、宽度(height,width,HW),数据类型是 uint8 。

需要注意的是,OpenCV 中彩色图片的通道接口(不论是读取,显示还是存储)是 BGR ,而不是主流的 RGB ,需要转换才能变成 RGB 。这也是它最被人诟病的地方,很容易出错。

import numpy as np
import cv2

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

2.图片存储

cv2.imwrite()
原型:imwrite(filename,img,params=None)
作用:写入图像
参数:
filename,写入的文件名。
img,待写入的图像。
params,特定格式下保存的参数编码,对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别,默认为3。一般情况下为None。

cv2.imwrite('messigray.png',img)

3.图片显示

cv2.imshow()
原型:imshow(winname,mat)
作用:创建一个图像窗口
参数:winname,窗口名称。mat,图像矩阵。


import cv2
 
# 读取图片sample.jpg
image = cv2.imread("../data/images/sample.jpg")  
 
if image is None:  # 检查是否有读取到了图片
   print("Could not open or find the image")
 
# 使用cvtColor()函数,将原图(彩色)转化为灰度图
grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
# 将灰度图保存为imageGray.jpg文件
cv2.imwrite("imageGray.jpg", grayImage)
 
# 创建窗口,用来显示图片
cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE) 
cv2.namedWindow("gray image", cv2.WINDOW_NORMAL)
 
# 显示图片
cv2.imshow("image", image) 
cv2.imshow("gray image", grayImage)
 
# 等待按下任意键,才关闭图片显示的窗口
cv2.waitKey(0) 

#释放所有窗口
cv2.destroyAllWindows()

上面的代码中,cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,**如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。**如果没有键盘输入,返回值为 -1,**如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。**它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下,这个后面我们会接着讨论。
cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。

4.获取图片属性

图像的属性包括:行,列,通道,图像数据类型,像素数目等

img.shape
作用:获取图像的形状。返回值是一个包含行数列数通道数元组如果图像是灰度图,返回值仅有行数和列数。所以通过检查这个返回值就可以知道加载的是灰度图还是彩色图。

print(img.shape)

## (342, 548, 3)

img.size
作用:返回图像的像素数目;

print(img.size, img.dtype) # img.type 返回的是图像的数据类型.

# 562248
# uint8

5.图片缩放

cv2.resize()
原型:cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)
作用:更改图片大小
参数:
InputArray src,输入图片
OutputArray dst,输出图片
Size,输出图片尺寸
fx, fy,沿x轴,y轴的缩放系数
interpolation,插入方式
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置)
INTER_AREA 使用像素区域关系进行重采样。
INTER_CUBIC 4x4像素邻域的双三次插值
INTER_LANCZOS4 8x8像素邻域的Lanczos插值

import cv2 as cv
 
# 读入原图片
img = cv.imread('test.jpg')
# 打印出图片尺寸
print(img.shape)
# 将图片高和宽分别赋值给x,y
x, y = img.shape[0:2]

# 缩放到原来的二分之一,输出尺寸格式为(宽,高)
scaleDown = cv.resize(img, (int(y / 2), int(x / 2)))
 
# 最近邻插值法放大
# 缩放到原来的1.5倍
scaleUp = cv.resize(img,None , fx=1.5, fy=1.5, interpolation=cv.INTER_NEAREST)
cv.imshow('OriginalPicture', img)
cv.imshow('resize0', scaleDown)
cv.imshow('resize1', scaleUp)
cv.waitKey(0)
cv.destroyAllWindows()

6.图片裁剪

我们直接操作numpy数组进行操作,将其中的指定行、列内容读出来,即完成图像剪切

crop = img[0:128, 0:512]

7.彩图转灰度图

python opencv将图片转为灰度图的方法示例

8.进阶:颜色空间转换

cv2.cvtColor(imgGray, cv2.COLOR_GRAY2RGB)

OpenCV之颜色空间转换、掩膜(mask)、颜色提取——python实现

可视化卷及神经网络热力图

python(+opencv2+numpy)对彩色图像的RGB通道提取、合成、显示并计算灰度图像

https://www.cnblogs.com/Undo-self-blog/p/8434906.html

未完待续。。。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值