import cv2
eng_path = r"fruit1/cuitao/cuitao-19453282-321255571.png"
cv2.imread读入的方式默认是BGR,而其他函数一般使用RGB,所以有时候需要转换,但是尽量谨慎使用,使用后图片会不同程度地失真
cv2.cvtColor():颜色空间转换函数
第一个参数,图片本身
第二个参数,图片颜色空间转换方式
cv2.COLOR_BGR2RGB或者cv2.COLOR_BGR2RGBA,但是这样操作后的图片和原图片颜色不一样,整体效果不如原图片效果好
cv2.COLOR_BGR2GRAY,图片则会变成黑白照片,黑白照片img.shape只有两个返回值,一个高h,一个宽w
img = cv2.imread("fruit1/cuitao/cuitao-19453282-321255571.png") # cv2默认BGR
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGBA) # BGR转换成RGBA,这里不使用效果更好,在这里尽量不要使用
print("eng_img:", img)
白边的裁剪范围要自己一个一个像素点去尝试,多试几次,才会找到
h, w, c = img.shape # 图像的高,宽,通道数
print(h, w, c) # 220 220 3
print(img.shape) # (220, 220, 3)
a = 28 # 裁剪后的h的起始值
b = h - 27 # 裁剪后的h的结束值
c = 0 # 裁剪后的w的起始值
d = w # 裁剪后的w的结束值
crops_img = img[a:b, c:d] # 图像裁剪
cv2.imwrite(filename="fruit3/cuitao/cuitao-19453282-321255571.png", img=crops_img)
直接读取只会返回一个None
path = r"fruit1/脆桃/脆桃-19453282-321255571.png"
img = cv2.imread(path)
前边顺利完成裁剪,但是直接写入中文路径,可以正常运行结束但是指定文件夹没有发生任何变化,不会生成裁剪后的图片
cv2.imwrite(filename="fruit3/脆桃/脆桃-19453282-321255571.png", img=crops_img)
import cv2
import numpy as np
path = r"fruit1/脆桃/脆桃-19453282-321255571.png"
cv2.imdecode的第一个参数是把图像路径用np.fromfile的方式读入,这种读入方式可以容纳中文路径,第二个参数cv2.IMREAD_COLOR可以把四通道图像改成三通道图像
三通道图像:RGB,即红绿蓝,红色为(255,0,0)
四通道图像:RGB+Alpha,Alpha用来衡量一个像素或图像的透明度,Alpha=0,该像素完全透明;Alpha=255,该像素完全不透明
cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数(可以直接写1)
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片(可以直接写0)
cv2.IMREAD_UNCHANGED:包括alpha(可以直接写-1)
img = cv2.imdecode(np.fromfile(path, np.uint8), cv2.IMREAD_COLOR)
print(img)
白边的裁剪范围要自己一个一个像素点去尝试,多试几次,才会找到
h, w, c = img.shape
print(h, w, c)
print(img.shape)
a = 28
b = h - 27
c = 0
d = w
crops_img = img[a:b, c:d]
把裁剪后的图像取出来,然后用tofile()转成文件存入指定中文路径中
cv2.imencode()中第一个参数可以写指定转换成的图片类型,可以根据需要去写,第二个参数是裁剪完成后的图片
后边的[1]是从imencode()编码的整体结果中把图片的向量数据取到,然后用tofile()转化到指定的中文路径中,这样可以正确写入中文路径而不会出错,要注意后边tofile()中的路径保存的图片形式要和imencode()中的第一个参数保持一致
# 中文路径写入
print(cv2.imencode(".png", crops_img))
print(cv2.imencode(".png", crops_img)[1])
cv2.imencode(".jpg", crops_img)[1].tofile("fruit3\脆桃\脆桃-19453282-321255571.jpg")