python实现求纯色彩图像的边框

 更新时间:2021年04月08日 15:24:19   作者:走错路的程序员  
这篇文章主要为大家详细介绍了python实现求纯色彩图像的边框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python实现求纯色彩图像的边框,供大家参考,具体内容如下

先上效果图,这里显示有点色差, 实际数值是纯色的, 而不是混色的.

放大局部细节看是这样的

原图是下面这样的

这个算法最大的特点是保留原始像素的数值, 而不是把边框统一变成白色.
实现的算法也超级简单. 就是有点慢. 考虑到我这个应用场景对性能要求不高, 比人快就行. 人工是它的几百倍. 所以也就无所谓啦.
测试结果一张1080*1920的图用时3秒, 如果换成c语言估计0.5秒左右.

算法原理, 每次4个田子形像素逐行扫描. 发现4个像素不一致的就输出到结果图上. 否则就是输出0.

代码如下.

#
# demo.py
# 识别单张图片
#
import argparse
import os 
import numpy as np
import time

from modeling.deeplab import *
from dataloaders import custom_transforms as tr
from PIL import Image
from torchvision import transforms
from dataloaders.utils import  *
from torchvision.utils import make_grid, save_image,to_image

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

def main():
    im = Image.open("test_border.png")
    npimg = np.array(im) # 这个图片是1维的索引图. 
    # chwimg = npimg.transpose(2,0,1) # HWC 变成 CHW 格式的矩阵
    print(npimg.shape)
    h,w,c = npimg.shape

    src = np.sum(npimg,axis=2) # 这里测试用, 先把3通道的合成了一个通道的, 实际使用的时候也是1通道的.
    print(src.shape)
    borderimg = np.zeros(src.shape) #默认都输出了0 后面就不用输出0了.
    # 修补bug, 解决边框线会丢失的问题.
    borderimg[0,:]=src[0,:]
    borderimg[:,0]=src[:,0]
    borderimg[-1,:]=src[-1,:]
    borderimg[:,-1]=src[:,-1]
   
    t1= time.time()
    for x in range(0,h-1,1): 
        for y in range(0,w-1,1):
            # point = src[x,y]
            # if(point>0):
                # print(point)
            if not (src[x,y] == src[x+1,y] == src[x,y+1] == src[x+1,y+1]): # 发现4个像素不一致的就输出到结果图上.
                borderimg[x,y] = src[x,y]
                borderimg[x+1,y] = src[x+1,y]
                borderimg[x,y+1] = src[x,y+1]
                borderimg[x+1,y+1] = src[x+1,y+1]
    t2= time.time()
    print("耗时",t2-t1)

    plt.figure()
    plt.title('display') 
    plt.imshow(src) 
    plt.show( )

    plt.imshow(borderimg) 
    plt.show( )

    print("start test get image border ...")

if __name__ == "__main__":
    main()
else:
    main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 利用Python将时间或时间间隔转为ISO 8601格式方法示例

    利用Python将时间或时间间隔转为ISO 8601格式方法示例

    国际标准化组织的国际标准ISO8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》,下面这篇文章主要给大家介绍了关于利用Python将时间或时间间隔转为ISO 8601格式的相关资料,需要的朋友可以参考下。
    2017-09-09
  • 在keras下实现多个模型的融合方式

    在keras下实现多个模型的融合方式

    这篇文章主要介绍了在keras下实现多个模型的融合方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python-re中search()函数的用法详解(查找ip)

    Python-re中search()函数的用法详解(查找ip)

    这篇文章主要介绍了Python-re中search()函数的用法-----查找ip,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • python上下文管理的使用场景实例讲解

    python上下文管理的使用场景实例讲解

    在本篇文章里小编给大家整理的是一篇关于python上下文管理的使用场景实例讲解内容,有兴趣的朋友们可以学习下。
    2021-03-03
  • pandas返回缺失值位置的方法实例教程

    pandas返回缺失值位置的方法实例教程

    当我们用python进行数据处理时会遇到很多缺失值,缺失值一般是由于我们所处理的数据本身的特性、当初录入的失误或者其它原因导致的,下面这篇文章主要给大家介绍了关于pandas返回缺失值位置的方法,需要的朋友可以参考下
    2022-01-01
  • opencv3/Python 稠密光流calcOpticalFlowFarneback详解

    opencv3/Python 稠密光流calcOpticalFlowFarneback详解

    今天小编就为大家分享一篇opencv3/Python 稠密光流calcOpticalFlowFarneback详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 解决Vscode中jupyter出现kernel dead问题

    解决Vscode中jupyter出现kernel dead问题

    遇到VSCode中Jupyter Kernel Dead时,可通过Anaconda Prompt安装ipykernel解决,首先使用jupyter kernelspec list命令查看内核,若发现缺少ipykernel,激活相应虚拟环境,使用conda install ipykernel命令安装,操作后,VSCode中Jupyter应能正常运行
    2024-09-09
  • python循环某一特定列的所有行数据(方法示例)

    python循环某一特定列的所有行数据(方法示例)

    在Python中,处理表格数据(比如CSV文件、Excel文件等)时,我们通常会使用pandas库,因为它提供了丰富的数据结构和数据分析工具,下面,我将以处理CSV文件中的某一特定列的所有行数据为例,给出详细、完整的代码示例,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 使用python生成各种常见条形码及二维码

    使用python生成各种常见条形码及二维码

    条形码和二维码是现代信息交换和数据存储的重要工具,它们将信息以图形的形式编码,便于机器识别和数据处理,本文将介绍如何使用Python快速生成各种常见的条形码如Code 128、EAN-13,以及生成二维码,需要的朋友可以参考下
    2024-07-07
  • Python免登录实现域名解析的示例详解

    Python免登录实现域名解析的示例详解

    这篇文章主要介绍了如何利用编写python脚本,实现通过dnspod api获取个人域名内的dns解析记录,从而实现域名的解析、修改和删除,需要的可以参考一下
    2023-03-03

最新评论