本文主要是介绍cv2和PIL.Image之间的转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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()会不断创建新进程。
这篇关于cv2和PIL.Image之间的转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!