【转载】OpenCV(C++ 与 Python 的比较)与 MATLAB 的比较
我们经常会为自己的技能选择合适工具而感到疑惑。
工具能够帮助你锻炼技能,但它们并不能使你成为一位能者(Craftsman)。
真正的能者并不与工具产生挂钩,而是自身的技能。能者,在他们的口袋中往往会拥有许多不同的工具。另外,他们还能明智地挑选一个合适的工具去完成自己的工作。
作为一名入门者,建议走一条阻碍最少的道路并选择一个你熟悉的工具。
OpenCV官方教程中文版(For Python)
开发手册(函数查询手册)
OpenCV函数库查询手册(python)
python:opencv开发手册
方法一:直接在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安装
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
未完待续。。。