cv2和PIL.Image之间的转换

2024-04-02 01:28
文章标签 转换 之间 pil image cv2

本文主要是介绍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之间的转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/868624

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

O(n)时间内对[0..n^-1]之间的n个数排序

题目 如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序 思路 把整数转换为n进制再排序,每个数有两位,每位的取值范围是[0..n-1],再进行基数排序 代码 #include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A,

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><

数据流与Bitmap之间相互转换

把获得的数据流转换成一副图片(Bitmap) 其原理就是把获得倒的数据流序列化到内存中,然后经过加工,在把数据从内存中反序列化出来就行了。 难点就是在如何实现加工。因为Bitmap有一个专有的格式,我们常称这个格式为数据头。加工的过程就是要把这个数据头与我们之前获得的数据流合并起来。(也就是要把这个头加入到我们之前获得的数据流的前面)      那么这个头是

PIL Python Imaging Library (PIL)

介绍         把Python的基础知识学习后,尝试一下如何安装、加载、使用非标准库,选择了图像处理模块PIL。         Python Imaging Library (PIL)是PythonWare公司提供的免费的图像处理工具包,是python下的图像处理模块,支持多种格式,并提供强大的图形与图像处理功能。虽然在这个软件包上要实现类似MATLAB中的复杂的图像处理算法并不