最近中日合作活动中要求使用opencv-python,于是我就复习一下,做个小总结,。
注意:opencv读取时,默认是BGR格式,且是numpy.ndarray类型
import cv2
import matplotlib.pyplot as plt
image = cv2.imread('./im0.png') # 默认读取BGR格式
print('图片的高:', image.shape[0])
print('图片的宽:', image.shape[1])
print('图片的通道数:', image.shape[2])
plt.imshow(image)
# plt.axis('off') # 不显示坐标
plt.show()
import cv2
import matplotlib.pyplot as plt
image = cv2.imread('./im0.png') # 默认读取BGR格式
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image)
# plt.axis('off') # 不显示坐标
plt.show()
cv2.imwrite('new_img.jpg')
可以使用cv2.line
第一个参数是图片的各个维度的值, 第二个参数是起始坐标,第三个参数是终止坐标, 第四个参数是画线颜色的RBG的值, 第五个参数是线的宽度。
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = np.zeros((224, 224, 3), dtype=np.uint8)
g = (0, 255, 0)
cv2.line(image, (0, 0), (224, 224), g, 5)
plt.imshow(image)
plt.show()
使用cv2.rectangle,第一个参数是图片的各个维度的值, 第二个参数是矩形左上角坐标,第三个参数是矩形右下角坐标, 第四个参数是画线颜色的RBG的值, 第五个参数是线的宽度,若是-1,则会将矩形填充。
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = np.zeros((224, 224, 3), dtype=np.uint8)
g = (0, 255, 0)
# cv2.line(image, (0, 0), (224, 224), g, 5)
cv2.rectangle(image, (30, 30), (100, 100), g, 3)
cv2.rectangle(image, (60, 60), (200, 200), g, -1)
plt.imshow(image)
plt.show()
使用cv2.circle, 第一个参数是图片的各个维度的值, 第二个参数是圆心坐标,第三个参数是半径, 第四个参数是画线颜色的RBG的值, 第五个参数是线的宽度,若是-1,则会将矩形填充。
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = np.zeros((224, 224, 3), dtype=np.uint8)
g = (0, 255, 0)
cv2.circle(image, (112, 112), 112, g, 4)
cv2.circle(image, (112, 112), 60, g, -1)
plt.imshow(image)
plt.show()
使用的是cv2.warpAffine,第一个参数是图片的各个维度的值, 第二个参数是方向,第三个是图片大小
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('im0.png')
a = np.float32([
[1, 0, 250], # 向右平移250个像素点
[0, 1, 200] # 向下平移200个像素点
])
image = cv2.warpAffine(image, a, (image.shape[1], image.shape[0]))
plt.imshow(image)
plt.show()
使用的是cv2.getRotationMatrix2D和cv2.warpAffine结合,cv2.getRotationMatrix2D第一个参数是旋转中心坐标,第二个参数是旋转角度,第三个是缩放程度。
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('im0.png')
h, w = image.shape[0], image.shape[1]
x, y = w/2, h/2
a = cv2.getRotationMatrix2D((x, y), 45, 1.5)
image = cv2.warpAffine(image, a, (w, h))
plt.imshow(image)
plt.show()
使用的是cv2.resize,第一个参数是图片,第二个参数是调整大小的宽和高,第三个参数是插值方法
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('im0.png')
n_w, n_h = 224, 224
image = cv2.resize(image, (n_w, n_h))
plt.imshow(image)
plt.show()
使用的是cv2.flip,第一个参数是图片,第二个参数是翻转方式
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('im0.png')
image = cv2.flip(image, 1)
plt.imshow(image)
plt.show()
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('im0.png')
image = cv2.flip(image, 0)
plt.imshow(image)
plt.show()
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('im0.png')
image = cv2.flip(image, -1)
plt.imshow(image)
plt.show()
裁剪主要是对x和y轴上的取值做变化,如下:
在x轴上取0~500,y轴取100到最后
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('im0.png')
image = image[0:500, 100:]
plt.imshow(image)
plt.show()