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()会不断创建新进程。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Next---YOLO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值