首页 > 其他分享 >mask2former出来的灰度图转切割轮廓后的二值图

mask2former出来的灰度图转切割轮廓后的二值图

时间:2024-02-05 17:45:20浏览次数:25  
标签:cv2 mask masks edge1 edge 图转 灰度 二值

切割后的灰度图

切割后的原图

转成二值图代码如下

点击查看代码
# This is a sample Python script.
import cv2
import numpy as np
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.




def masks_to_mask( masks):
    '''
    16位mask转8位二值mask
    '''
    # 注意: Sobel函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以Sobel建立的图像位数不够,会有截断。
    # 第二个参数可以传cv.CV_32F。在经过处理后,要用convertScaleAbs()函数将其转回原来的uint8形式。否则将无法显示图像,
    # 而只是一副灰色的窗口。
    x = cv2.Sobel(masks, cv2.CV_16S, 1, 0)
    y = cv2.Sobel(masks, cv2.CV_16S, 0, 1)

    absX = cv2.convertScaleAbs(x)  # 转回uint8
    absY = cv2.convertScaleAbs(y)
    # 函数convertScaleAbs依次执行三个操作:缩放,获取绝对值,转换为无符号的8位类型
    edge = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
    # cv2.imshow("edge",edge)
    edge1=edge
    # num1=cv2.countNonZero(edge)
    ret, edge1 = cv2.threshold(edge, 0, 255, cv2.THRESH_BINARY)
    cv2.bitwise_not(edge1, edge1)
    cv2.imshow("edge1", edge1)
    cv2.imwrite('ConvertToBinary/dest/edge1.png', edge1)
    mask = np.where(masks > 0, 255, 0)
    mask = mask.astype(np.uint8)


    cv2.bitwise_and(edge1, mask, mask)
    cv2.imshow("result",mask)

    return mask


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    # print_hi('PyCharm')
    src=cv2.imread('ConvertToBinary/src/003.png')

    mask=masks_to_mask(src)
    cv2.imwrite('ConvertToBinary/dest/result.png',mask)
    # cv2.imshow("mask",mask)
    cv2.waitKey(0)
# See PyCharm help at https://www.jetbrains.com/help/pycharm/

中间结果edge1.png图片

相当于生成一个黑色边缘的mask与原二值图做与与运算这样就可以生成多个临近物体分开的二值图
最后结果为

如果用普通方法转成的二值图为

请注意右下角白色部分| | | |
| ---- | ---- | ---- |
| | | |

标签:cv2,mask,masks,edge1,edge,图转,灰度,二值
From: https://www.cnblogs.com/SunshineWeather/p/18008551

相关文章

  • python灰度图像变彩色
    灰度图像转换为彩色图像方法简介在图像处理领域,灰度图像转换为彩色图像是一种常见的需求。虽然一个像素的灰度值不能直接对应一个彩色像素,但这种转换可以通过一些技术手段来实现。通常,这种转换可以通过颜色映射、图像着色和深度学习来实现。色彩映射是指灰度值按照一定的规则映......
  • h5 canvas 视频透明度抠图,视频需要一个灰度通道副本表示透明度
    视频透明度抠图,视频需要一个灰度通道副本表示透明度目前抖音等直播平台的礼物特效就是这个方法处理的 <!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>视频灰度通道抠图,视频包含灰度值表示透明的副本</title><style>html,body{ ::-......
  • (MJ出图转大模型)删除二级文件夹
    importosimportshutildefdelete_subfolders(directory):#检查目录是否存在ifnotos.path.exists(directory):print("指定的目录不存在:",directory)return#遍历目录中的所有项foriteminos.listdir(directory):item......
  • 使用 Feature Flags 实现数据库灰度迁移的监控与可观测性
    作者:观测云与胡博场景描述很多企业会遇到数据库升级、或数据库迁移的情况,尤其是在自建数据库服务向云数据库服务、自建机房向云机房、旧数据库向新数据库迁移等场景。然而,我们需要在整个移植过程中保证其稳定性、避免数据遗失、服务宕机等情况,最常见的移植方法之一就是数据库双写......
  • MSE/Istio 全链路灰度的挑战、实现思路与解决方案
    微服务架构下的灰度发布挑战在传统的单体应用架构中,灰度发布相对简单。只需要在服务的流量入口处进行分流,通过使用K8sService或各种类型的网关即可实现。然而,微服务架构引入了新的复杂性,服务之间的依赖关系错综复杂。有时候,某个功能的发布可能依赖于多个服务,要求灰度流量在整......
  • Kruise Rollout 全链路灰度实践
    作者:旦酱、十眠什么是全链路灰度?在发布应用的过程中,我们通常希望用少量特定流量来验证新版本的发布是否正常,以保障整体稳定性。这个过程被称为灰度发布。关于灰度发布,我们通过逐步增加发布的范围,来验证新版本的稳定性。如果新版本出现问题,我们也能及时发现,控制影响范围,保障整体的稳......
  • 【图像处理基础】灰度图raw8格式转NV12格式
    前言 转换原理*RGB转YUV-NV12:Y=0.299R+0.587G+0.114BU=-0.1687R-0.3313G+0.5B+128V=0.5R-0.4187G-0.0813B+128*YUV-NV12转RGBR=Y+1.402(V-128)#1.4075G=Y-0.34414(U-128)-0.71414(V-128)B=Y+1.772(U-......
  • 蓝绿发布、滚动发布、灰度发布,有什么区别 ?
    蓝绿发布   蓝绿部署中,一共有两套系统:一套是正在提供服务系统(也就是上面说的旧版),标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色......
  • 基于TIC6000的DSP教学实验箱操作教程:5-18 RGB24图像灰度转换(LCD显示)
    一、实验目的学习RGB24图像灰度转换的原理,掌握图像的读取方法,并实现在LCD上显示灰度转换前后的图像。二、实验原理RGB24图像灰度转换RGB颜色空间作为一种常用的彩色图像表示模型,分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。一般情况下,RGB彩色图像灰度化有三种转化方案:(1)......
  • 使用springcloud 实现 蓝绿发布、灰度发布(金丝雀发布)
    介绍工作中经常要涉及到功能发布,这个时候也经常是业务系统最有可能遇到问题的时候,需要要尽量减少发布引起的风险。比如在系统负载比较小的时候使用。还有蓝绿发布、灰度发布等等,今天介绍一下这几种常见的发布,并使用springcloud实现。1.传统发布方式一个系统最初的时候,使用量小,用户......