图像处理:numpy数组格式,opencv格式,PIL格式。是怎么回事?

news/2024/7/21 4:13:51 标签: 图像处理, 深度学习

让newbing帮我解决一下:

1.首先,PIL包的作用:

 opencv包的作用:

2.两者作用于不同的图片格式:

 3.opencv和PIL图像格式的相互转化

两者的相互转换需要借助numpy格式在中间,再进行转换。

其中cv2.cvtColor可以作用于numpy和opencv格式的图片,实现numpy和opencv的相互转换。cv2.cvtColo函数用于将图像从一种颜色空间转换为另一种颜色空间。

 

 np.array和np.asarray的区别:np.array会复制;而np.asarray与原始图像共享相同的数据缓冲区

 4.python中处理的图像格式

numpy数组——>opencv图像格式:

灰度图像:

 RGB图像:先用np.unit8函数

opencv图像格式——>numpy数组:

两种方法

numpy数组——>PIL图像格式:

灰度图像

 RGB图像:先用np.unit8函数

5.介绍几个opencv函数

cv2.inRange()

mask = cv2.inRange(hsv, thresh[0], thresh[1])   #cv2.inRange()函数是OpenCV中的函数,用于确认元素值是否介于某个区域。
    #hsv是原图,thresh[0]和thresh1是最小值和最大值,用于确定图像中的颜色范围。mask是输出的二进制图像,其中低于lowerb的值和高于upperb的值都变为0。

cv2.morphologyEx()函数,可以作用于numpy和opencv格式的图像

 

    close_kernel = np.ones((cls_kernel, cls_kernel), dtype=np.uint8)#全1矩阵
    image_close_img = Image.fromarray(cv2.morphologyEx(np.array(mask), cv2.MORPH_CLOSE, close_kernel))
    #np.array(mask)输入图像;close_kernel全1的核;cv2.MORPH_CLOSE闭运算用于排除小型空洞。并转换为PIL格式图像
    open_kernel = np.ones((open_kernal, open_kernal), dtype=np.uint8)
    image_open_np = cv2.morphologyEx(np.array(image_close_img), cv2.MORPH_OPEN, open_kernel)  #用于去除噪声,平滑较大物体的边界

    _, contours, _ = cv2.findContours(image_open_np, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  #在二值图像中找到轮廓,返回一个包含所有轮廓的列表
    #cv2.findContours函数的第一个参数是输入图像,第二个参数是轮廓检索模式,第三个参数是轮廓逼近方法。cv2.RETR_EXTERNAL表示只检测外部轮廓,cv2.CHAIN_APPROX_SIMPLE表示只保留轮廓的端点
    #变量contours将包含所有检测到的轮廓。这些轮廓可以用于计算图像中物体的面积、周长、重心等信息。

cv2.findContours()函数

 cv2.boundingRect()函数

    boundingBox = [cv2.boundingRect(c) for c in contours]    #cv2.boundingRect函数用于计算轮廓的边界框,返回一个包含边界框坐标和大小的元组。
    boundingBox = [sst for sst in boundingBox if sst[2] > 150 and sst[3] > 150]  #boundingBox列表将只包含宽度和高度大于150像素的边界框。
    #cv2.boundingRect函数会返回一个包含边界框坐标和大小的元组,其中前两个元素是矩形左上角的坐标,后两个元素是矩形的宽度和高度。因此,边界框是一个矩形,可以用来表示物体在图像中的位置和大小。
    #这段代码通常用于从图像中提取具有特定大小的物体。例如,在目标检测任务中,可以使用这段代码来过滤掉太小或太大的物体。
    print(boundingBox)
    print('boundingBox number ', len(boundingBox))  #输出边界框的个数

 cv2.drawContours()函数,再图像上绘制轮廓

   #这段代码的作用是在图像上绘制轮廓,并将绘制后的图像显示出来。isDrawContoursOnImages变量控制是否绘制轮廓。如果为True,则会在图像上绘制轮廓并显示出来。
    if isDrawContoursOnImages:
        line_color = (0, 0, 0)  # blue color code.(0,0,0)是黑色
        contours_rgb_image_np = np.array(subSlide)
        cv2.drawContours(contours_rgb_image_np, contours, -1, line_color, 50)
        #cv2.drawContours函数用于在图像上绘制轮廓,第一个参数是输入图像,第二个参数是轮廓列表,第三个参数是轮廓索引(-1表示绘制所有轮廓),第四个参数是线条颜色,第五个参数是线条宽度。
        contours_rgb_image_np = cv2.resize(contours_rgb_image_np, (0, 0), fx=0.2, fy=0.2)  #为了显示图像。所以缩小他
        countours_rgb_image_img = Image.fromarray(contours_rgb_image_np.astype(np.uint8))  #将contours_rgb_image_np缩小到原来的1/5,然后将其转换为PIL图像格式,这样就可以使用PIL库中的其他函数对图像进行处理
        #
        countours_rgb_image_img.show()   #PIL库中的一个函数,用于显示图像,原始图像加区域边框

http://www.niftyadmin.cn/n/199418.html

相关文章

【1053. 交换一次的先前排列】

来源:力扣(LeetCode) 描述: 给你一个正整数数组 arr(可能存在重复的元素),请你返回可在 一次交换(交换两数字 arr[i] 和 arr[j] 的位置)后得到的、按字典序排列小于 ar…

远程真机appium自动化的用法

TCOE Mobile Farm使用方法 Jeff Xie Feb 2022 Mobile Farm地址: https://mobilecloud.epam.com 执行机必须可以连接mobile farm的网络,才能执行mobile farm的代码 执行机必须可以连接mobile farm的网络,才能执行mobile farm的代码 执行机必须可以连接…

分享30个小升初简历模板,总有一款适合您

分享30个小升初简历模板,总有一款适合您 30小升初简历模板下载链接:https://pan.baidu.com/s/15jkgQdLiCa24pz6bh0CoNA?pwd65rj 提取码:65rj class ChinaZJsSelenium:base_url "https://sc.chinaz.com/" # 采集的网址save_path …

Linux RepoSync将yum存储库同步到本地目录

当同步开始时,RepoSync下载存储库的索引,并将它们与开始时为空的当前索引进行比较,它为每个新的、删除的或修改的包或索引创建一个操作。它每次下载一个包以减少存储需求,对其进行验证,然后将它写入目标存储库。该过程…

TypeScript(十)泛型进阶

目录 前言 泛型约束 联合类型泛型约束 交叉类型泛型约束 泛型约束泛型 递归类型别名 条件类型 分发条件类型 类型过滤 类型推导 infer关键字 回到类型推导 映射&索引类型 索引访问类型 映射类型 必选属性 可变属性 结语 相关文章 前言 本文收录于TypeS…

leetcode:2023/4/6

每日一题 1017.负二进制转换 class Solution {public String baseNeg2(int n) {if(n0){return "0";}int[] bitsnew int[32];for(int i0;i<32&&n!0;i){if((n&1)!0){bits[i];if((i&1)!0){bits[i1];}}n>>1;}int carry0;for(int i0;i<32;i)…

重装系统怎么找回文件数据恢复

重装系统怎么找回文件&#xff1f;日常使用的电脑总会出现一些故障。常见的故障可以通过开关机解决&#xff0c;更严重的问题有时需要重装电脑系统。重装电脑系统很容易导致保存在电脑中的数据丢失。如果出现这种情况&#xff0c;重装系统后丢失的文件怎么恢复呢?下面小编就来…

2023年4月北京/上海/深圳/广州产品经理NPDP认证火热招生中

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…