You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
1.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import cv2
import numpy as np
class Photo:
def __init__(self, filepath):
self.img = cv2.imread(filepath)
def image(self):
return self.img
# 逆时针旋转90度, img的shape会变
def rotate(self):
rows, cols, depth = self.img.shape
newImage = np.zeros((cols, rows, 3), np.uint8)
for r in range(0, rows):
for c in range(0, cols):
newImage[cols - 1 - c, r] = self.img[r, c]
self.img = newImage
# 水平镜像
def horizontal_mirror(self):
self.img = cv2.flip(self.img, 1, dst=None)
# 水平镜像
def vertical_mirror(self):
self.img = cv2.flip(self.img, 0, dst=None)
# ratio: [1, 500]
def resize(self, ratio):
self.img = cv2.resize(self.img, dsize=None, fx=ratio / 100.0, fy=ratio / 100.0, interpolation=cv2.INTER_LINEAR)
# value: [0,100]
def lighting(self, value):
# 具体做法先归一化到1然后gamma作为指数值求出新的像素值再还原
gamma_table = [np.power(x / 255.0, value) * 255.0 for x in range(256)]
gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
# 实现映射用的是Opencv的查表函数
self.img = cv2.LUT(self.img, gamma_table)
# value: [-100,100]
def contrast(self, value):
lst = value * self.img
lst += np.mean(self.img - lst)
np.clip(lst, 0, 255, self.img)
# value: [-100,100]
def saturate(self, value):
pass
# value: [-100,100]
def hue(self, value):
pass
# value: [0,100]
def sharpen(self, value):
pass
# value: [0,100]
def blur(self, value):
pass
def toGray(self):
pass
def invert(self):
pass
def toBinary(self):
pass