PIL.Image转换成OpenCV格式:
import cv2
from PIL import Image
import numpy
image = Image.open("plane.jpg")
image.show()
img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
cv2.imshow("OpenCV",img)
cv2.waitKey()
cv2保存图片用cv2.imwrite("/home/1.jpg" ,frame * 1) # *1才为彩色,后面*1可以不写
cv2看图片大小用 img.shape # 它的输出是(480, 640, 3),记住这里宽是480,长是640,深度是3色的彩色
cv2裁剪用img = img[60:420, 60:580, :] #eg:[宽为60~(480-60),长为60~(640-60),第三个是选择全部深度]
OpenCV转换成PIL.Image格式:
import cv2
from PIL import Image
import numpy
img = cv2.imread("plane.jpg")
cv2.imshow("OpenCV",img)
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()
PIL的Image保存图片用img.save(“001.jpg”)
PIL的Image看图片大小用frame.size
PIL的Image裁剪用crop
# box = (100, 100,lab_w-100,lab_h-100) # 左 上 右 下(控制裁剪框大小)(前两个小于后两个数值)
# img = img.crop(box)
还有tabel里面画框用cv2.rectangle
# 画框-->cv2.rectangle
frame = cv2.rectangle(frame, (100,100 ), (lab_w-100,lab_h-100 ), (0, 0, 255), 6) #后面两个分别是颜色和框的宽度
不要cv2转换PIL的Image,此时还是480宽,640高,再来放大原来label大小再来crop裁剪,这样放大会丢失所以还是原图修改,直接按比例就好附上我自己的代码来提高图像稳定性
def Preheat(self):
temperature = True # 用来对比,有按下后没按下两者稳定性是否有很大差别,True表示预热去掉边框外的影响,False表示原来整张图加载进去的
capture = self.capture # 当然我前面def __init__里面有self.capture = cv2.VideoCapture(0)
# 获取一帧
ret,frame = capture.read()
# print(frame.shape)
# print("lab_w:%d" % (lab_w))
# print("lab_h:%d" % (lab_h))
frame = cv2.flip(frame, flipCode=1) # 水平翻转,我label是1356长,837宽
x = int(100/837*480) # 因为下面不准有小数所以转int,有那么一行误差啦不影响
w = int(480-100/837*480)
y = int(100/1356*640)
h = int(640-100/1356*640)
frame = frame[x:w, y:h, :] # 这个cv2里面的裁剪,eg:[宽为60~(480-60),长为60~(640-60),第三个是选择全部深度]
cv2.imwrite("000.jpg",frame)
还有提醒一下:如果是显示视频的话,还是用cv2.imshow(‘frame’,img),因为死循环while image.show()会不断创建新进程。