OpenCv入门4-----使用OpenCV扩大数据库

Gamma计算

源码

import cv2 as cv 
import numpy as np
import matplotlib.pyplot as plt
img=plt.imread("D:/picture/2.jpg")
gamma_change=[np.power(x/255,0.4)*255 for x in range(256)]
gamma_img=np.round(np.array(gamma_change)).astype(np.uint8)
img_OK=cv.LUT(img,gamma_img)#降灰度级
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(img_OK)
plt.show()

详解

gamma_change=[np.power(x/255,0.4)*255 for x in range(256)]

range数组:从0到256。 power:(x/255)的0.4次方。

gamma_img=np.round(np.array(gamma_change)).astype(np.uint8)

round() 方法返回浮点数x的四舍五入值。

img_OK=cv.LUT(img,gamma_img)

降灰度级。 详见【OpenCV】之LUT函数

仿射变换函数warpAffiine

图像的旋转,平移以及翻转变换。

源码

import cv2 as cv
import numpy as np
img=cv.imread("D:/picture/2.jpg")
turn_img=np.array([[0,0.6,90],[1.7,0,200]],dtype=np.float32)
OK_imag=cv.warpAffine(img,turn_img,(500,600))
cv.imshow("test",OK_imag)
cv.waitKey(0)
cv.destroyAllWindows()
turn_img=np.array([[0,0.6,90],[1.7,0,200]],dtype=np.float32)

创建仿射变换矩阵。
OpenCv入门4-----使用OpenCV扩大数据库_第1张图片

使用OpenCV扩大数据库

图像的随机裁剪

源码

import cv2 as cv
import random as ra
image=cv.imread("D:/picture/2.jpg")
high,wide,passageway=image.shape
h=int(high * 0.4)
w=int(wide * 0.4)
for _ in range(9):
    startx=int(ra.uniform(0,h))
    starty=int(ra.uniform(0,w))
    ima=image[startx:600,starty:600]
    cv.imshow("end",ima)
    cv.waitKey(0)
cv.destroyAllWindows()

 startx=int(ra.uniform(0,h))
 starty=int(ra.uniform(0,w))

生成0到h的随机数。

结果
OpenCv入门4-----使用OpenCV扩大数据库_第2张图片

图像的随机旋转

平移或旋转图片,getRotationMatrix2D函数。
getRotationMatrix2D(center,angle,scale),第一个参数是选择原点,第二个是逆时针旋转的角度,第三个是缩放倍数。

源码

import cv2 as cv
image=cv.imread("D:/picture/1.jpg")
high,wide,pa=image.shape
H=high/2
W=wide/2
turn_image=cv.getRotationMatrix2D((H,W),45,1)#旋转矩阵 
OK_image=cv.warpAffine(image,turn_image,(high,wide))
cv.imshow("turn_image",turn_image)
cv.imshow("OK_image",OK_image)
cv.waitKey(0)
cv.destroyAllWindows()

鼠标监控

源码

import cv2 as cv
image=cv.imread("D:/picture/1.jpg")
now_hand = 0  # 0-起点  1-终点
start_x=0;start_y=0
def mouse(event,x,y,flags,param):
    global now_hand,start_x,start_y
    if event == cv.EVENT_LBUTTONUP:
        if now_hand == 1: #需要画了
            cv.rectangle(image,(start_x, start_y),(x,y),(0,255,0),2)
        else:
            start_x = x;start_y=y   #记录当前起点坐标
        now_hand = 1- now_hand
cv.namedWindow("test")
cv.setMouseCallback("test",mouse)#mouse回调函数
while(1):
    cv.imshow("test",image)
    if cv.waitKey(1) & 0xFF == ord('q'):
     break
cv.destroyAllWindows()

结果
OpenCv入门4-----使用OpenCV扩大数据库_第3张图片

你可能感兴趣的:(Opencv+python)