精华内容
下载资源
问答
  • Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域 Matlab中可以使用graythresh(Img)函数设置二值化的阈值,再用im2bw转化为二值图像。在Matlab中,可以使用bwlabel()和bwlabeln()函数来...

    Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域

    尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/71440949
        Matlab中可以使用graythresh(Img)函数设置二值化的阈值,再用im2bw转化为二值图像。在Matlab中,可以使用bwlabel()和bwlabeln()函数来标记二值图像的连通区域。需要注意的是:所谓的连通区域标记是指对二值图像中白色像色而言,即值为1的像素进行标记,而黑色像素看作是背景颜色。当然,Matlab中还有个regionprops()函数可以用于统计图像区域的属性,如面积大小,重心位置。关于bwlabel()、bwlabeln()和regionprops()的用法,请查看相关博客吧

        本博客Matlab代码将实现的功能:将图像转为二值图像,分割出感兴趣的区域,并用“红色矩形线框”标记连通区域的面积,用蓝色点标记连通区域的重心位置,为了减少噪声的干扰,代码中将连通区域面积(像素个数)不足100的区域认为是噪声点,并将其删除(即置为背景黑色)。本人用PS制作了一个GIF动画图,以便大家观看效果图:

    clc;clear all;close all
    %% 清空变量,读取图像,并显示其属性
    clear;close all
    src = imread('rice.jpg');
    %显示原始图像
    figure,
    subplot(2,2,1),imshow(src),title('原图')
    
    %用ostu方法获取二值化阈值,进行二值化并进行显示
    level=graythresh(src);
    bw=im2bw(src,level);
    subplot(2,2,2),imshow(bw),title('二值图像')
    
    %运用开操作消去噪点
    se = strel('disk',2);
    openbw=imopen(bw,se);%对白色点而言
    subplot(2,2,3),imshow(openbw),title('开运算后的效果图')
    
    %获取连通区域,并进行显示
    % L = bwlabel(openbw,8);
    [L,num] = bwlabel(openbw,8);
    RGB = label2rgb(L);
    subplot(2,2,4),imshow(RGB),title('用rgb颜色标记不同区域')
    
    %获取区域的'basic'属性, 'Area', 'Centroid', and 'BoundingBox' 
    % stats = regionprops(openbw, 'basic');
     stats = regionprops(openbw, 'BoundingBox' ,'Area','Centroid' ,'PixelList' ); %统计白色的连通区域
    centroids = cat(1, stats.Centroid);
    
    %%
    noiseArea=100;
    figure,imshow(openbw),title('2')  
    hold on
    for i=1:size(stats)
        imshow(openbw)
        rectangle('Position',[stats(i).BoundingBox],'LineWidth',2,'LineStyle','--','EdgeColor','r'),
        plot(centroids(i,1), centroids(i,2), 'b*');             %每个连通区域的重心位置
        area = stats(i).Area;                                   %连通区域的面积
        if area<noiseArea                                       %若当前连通区域面积小于噪声点的面积,则该区域设置为0
            pointList = stats(i).PixelList;                     %每个连通区域的像素位置
            rIndex=pointList(:,2);cIndex=pointList(:,1);
            pointList = stats(i).PixelList;                     %连通区域的像素坐标
            openbw(rIndex,cIndex)=0;                            %连通区域的面积不足100,置为背景颜色
        end
        pause(1);
        saveas(gcf,sprintf('img/%d',i),'jpg')                   %保存图片
    end
    hold off





    展开全文
  • 其实顶帽就是用一个结构元素(核矩阵)通过开操作从一副图像删除前景色中比较成整体稍大的部分,留下来前景色中相对比较亮的细小部分,就是从图像的暗背景上提取细小的亮物体,因此顶帽这个特性可以用于校正不均匀...

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython

    一、顶帽简介

    顶帽(Top Hat),又称“礼帽”运算,其结果图像为原图像与其开运算的差,即:
    dest=src-open(src,kernal)

    由于开运算是先腐蚀后膨胀,会去除背景色上的噪点或者轮廓线上的毛刺和凸起,同时也会缩小图像前景轮廓的范围,实际上也就是放大了图像间裂缝或者局部背景色区域,因此从原图中减去开运算后的图,运算结果保留了原图那些相对比周边更明亮的区域,如背景色中的白色噪点或轮廓线。所以顶帽可以用来分离比邻近区域亮一些的线条或噪点,当一幅图像具有大幅的背景(如黑底)的时候,可以使用顶帽运算提取暗背景下的亮色点或线等物体。

    顶帽在OpenCV-Python的调用语法如下:
    morphologyEx(src, CV2.MORPH_TOPHAT, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

    关于morphologyEx的介绍请参考《OpenCV-Python图像形态变换概述及morphologyEx函数介绍: https://blog.csdn.net/LaoYuanPython/article/details/109556425》。

    二、利用顶帽提取噪点

    2.1、案例1:处理黑色背景的灰度图

    2.1.1、案例原图

    在如下图像(对应文件:大背景小前景图例.jpg)中,第一行第二个图像和第二行第一个图像临近区域都有噪点:
    在这里插入图片描述

    2.1.2、处理代码

    import cv2
    import numpy as np
    
    from opencvPublic import print2DMatrix,preparePreviewImg,previewImgList,previewImg
    
    def morphologyExTest(imgObj,imgTitle=''):
        if isinstance(imgObj, str):
            img = cv2.imread(imgObj)#, cv2.IMREAD_GRAYSCALE)
            if img is None:
                img = cv2.imdecode(np.fromfile(imgObj, dtype=np.uint8), -1)
            imgTitle = imgTitle+imgObj+': '
        else:
            imgTitle = imgTitle + ': '
        if len(img.shape)==2: channel = 1
        else: channel = img.shape[2]
        if channel==3:
            img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        elif channel==4:
            img = cv2.cvtColor(img,cv2.COLOR_BGRA2GRAY)
        ksize = (3,3)
        kernal = cv2.getStructuringElement(cv2.MORPH_RECT,ksize )
        preparePreviewImg(cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernal),imgTitle+f'顶帽,矩形核大小{ksize}')
    
    def morphologyTest():
        morphologyExTest(r'f:\pic\大背景小前景图例.jpg')
        previewImgList()
    
    morphologyTest()
    

    上面代码中使用的图像预览的函数请见《OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析: https://blog.csdn.net/LaoYuanPython/article/details/109984045》的介绍。

    2.1.3、结果图像

    经上述代码处理后,该原图顶帽运算的结果图像如下:
    在这里插入图片描述
    从上述结果图像可以看到,顶帽将黑色背景下的白色噪点以及细小的轮廓图像获取出来了,而那些轮廓线稍微大些的轮廓在顶帽后消失了。

    2.2、案例2:处理彩色图像

    将上述代码中处理的原图替换为如下图像(文件名:山林铁轨.JPG):
    在这里插入图片描述
    得到如下顶帽结果图像:
    在这里插入图片描述
    可以看到原图中相对比较亮的文字被提取出来。

    2.3、案例3:处理黑色背景的彩色图像

    原图如下(文件名:简单图形.png):
    在这里插入图片描述
    得到如下顶帽结果图像:
    在这里插入图片描述

    可以看到白色线条被提取出来。

    三、小结

    本文简单介绍了顶帽的概念、原理和作用,以及OpenCV-Python的具体实现,并提供了三个利用顶帽提取图像中前景色噪点或小的轮廓,可以看到通过顶帽可以提取出相对源图像中小的比较亮的部分。其实顶帽就是用一个结构元素(核矩阵)通过开操作从一副图像中删除前景色中比较成整体稍大的部分,留下来前景色中相对比较亮的细小部分,就是从图像的暗背景上提取细小的亮物体,因此顶帽这个特性可以用于校正不均匀光照的影响(请参考博文:《光照不均匀图像分割技巧2——顶帽变换和底帽变换》)。

    写作不易,敬请支持:

    如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

    四、形态变换博文传送门

    下面是老猿博文中与形态变换相关的博文列表:

    1. https://blog.csdn.net/LaoYuanPython/article/details/109441709 OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍
    2. https://blog.csdn.net/LaoYuanPython/article/details/109984045 OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析
    3. https://blog.csdn.net/LaoYuanPython/article/details/109556425 OpenCV-Python图像形态变换概述及morphologyEx函数介绍
    4. https://blog.csdn.net/LaoYuanPython/article/details/109768675 OpenCV-Python图像运算变换处理:形态学梯度运算及分类
    5. https://blog.csdn.net/LaoYuanPython/article/details/110195287 OpenCV-Python中预览超大图的程序实现方法
    6. https://blog.csdn.net/LaoYuanPython/article/details/110223709 OpenCV-Python图形图像处理:利用TopHat顶帽获取背景色中的噪点
    7. https://blog.csdn.net/LaoYuanPython/article/details/110294445 OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印
    8. https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解

    更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
    专栏网址https://blog.csdn.net/laoyuanpython/category_9979286.html

    关于老猿的付费专栏

    老猿的付费专栏《使用PyQt开发图形界面Python应用 》(https://blog.csdn.net/laoyuanpython/category_9607725.html)专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》 (https://blog.csdn.net/laoyuanpython/category_10232926.html)详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

    付费专栏文章目录:《moviepy音视频开发专栏文章目录》(https://blog.csdn.net/LaoYuanPython/article/details/107574583)、《使用PyQt开发图形界面Python应用专栏目录 》(https://blog.csdn.net/LaoYuanPython/article/details/107580932)。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》(https://blog.csdn.net/laoyuanpython/category_9831699.html)从零开始学习Python。

    如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

    跟老猿学Python、学OpenCV!

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    展开全文
  • 图像处理------图像细化 算法流程参考自:图像处理细化算法 参考博文中没有细化算法的代码实现,只有算法的具体流程,在本文中,使用python实现图像细化的代码实现,但其运行效率没有考虑,只为理解算法原理: 算法...

    图像处理------图像细化

    算法流程参考自:图像处理细化算法
    参考博文中没有细化算法的代码实现,只有算法的具体流程,在本文中,使用python实现图像细化的代码实现,但其运行效率没有考虑,只为理解算法原理:

    算法原理步骤

    对二值图像进行细化,就是骨架提取,删除不需要的轮廓点,保留其骨架点。假设一个像素点,该点为p1,八邻域为p2->p9,通过考虑P1邻域的实际情况,以便决定是否删除P1点。假设处理的图像为二值图形,背景为黑色0,细化的前景为1.
    在这里插入图片描述
    算法流程,分为两步,每步判断四个条件,然后决定像素点的去留。

    第一步

    1.条件1: 2<=P2+P3+P3+P4+P5+P6+P7+P8+P9 <=6
    大于2保证P1不是断电和孤立点,小于6保证P1是一个边界点,等于0时周围没有等于1的像素,P1为孤立点,等于1时周围只有一个等于1的像素,多以P1为端点。(是端点的条件,周围有且只能有一个值为1的像素)
    2.P2->P9的排列顺序,如上图的排列顺序,01模式的数量为1,如下图P2P3,P6P7所以改像素的01模式数量为2.
    保证01模式数量为1,是要保证删除当前像素点后的连通性。
    在这里插入图片描述
    3.P2P4P6 = 0
    4.P4P6P8=0
    第一步之后会如果四条全部满足则令P1=0,否则保持不变。第一步之后会删除右下角的边界点。

    第二步

    对第一步操作后的图像,执行第二步操作:
    1.条件1: 2<=P2+P3+P3+P4+P5+P6+P7+P8+P9 <=6
    2.P2->P9的排列顺序,如上图的排列顺序,01模式的数量为1,如下图P2P3,P6P7所以改像素的01模式数量为2.
    保证01模式数量为1,是要保证删除当前像素点后的连通性。
    3.P2P4P8 = 0
    4.P2P6P8=0
    第二步执行之后会删除左上的边界点。

    执行完上述的两个步骤,就完成了一次细化操作,可以通过多次迭代执行,得到最终的骨架图

    算法代码实现

    主要使用python实现上述的细化流程,封装成为一个函数。
    在代码中主要按照第一步的实现来说,第二步和第一步的实现几乎完全相同

        for row in range(h-1):
            for col in range(w-1):
                if img[row][col] == 1:
                    flag = 0
                    #条件1
                    t = img[row-1][col-1] + img[row-1][col] + img[row-1][col+1] + img[row][col-1] + img[row][col+1]
                    + img[row+1][col-1] + img[row+1][col] + img[row+1][col+1]
                    if t >= 2 and t <= 6:
                        flag += 1
                    #条件2
                    t = 0
                    lis = [img[row-1][col],img[row-1][col+1],img[row][col+1],img[row+1][col+1],img[row+1][col],img[row+1][col-1],img[row][col-1],img[row-1][col-1],img[row-1][col]]
                    for i in range(len(lis)-1):
                        if lis[i] == 0 and lis[i+1] ==1:
                            t += 1
                    if t == 1:
                        flag += 1
                    #条件3
                    s = img[row-1][col] * img[row][col+1] * img[row+1][col]
                    if s == 0:
                        flag += 1
    
                    #条件4
                    s = img[row][col+1] * img[row+1][col] * img[row][col-1]
                    if s == 0:
                        flag += 1
                    if flag == 4:
                        dst[row][col] = 0
    

    首先,我们判断当前像素值是否为1,如果是再进行以下的四个条件判断,如果不是这直接跳过。
    在之前,没有进行这行代码,我迭代6次花费的时间是现在的很多倍
    判断成立后设立一个flag用来记录条件成立的个数。
    下面就是四个条件的分别判断了,
    第一个条件,相对来说比较简单,看一下代码都会懂的。

    				t = img[row-1][col-1] + img[row-1][col] + img[row-1][col+1] + img[row][col-1] + img[row][col+1]
                    + img[row+1][col-1] + img[row+1][col] + img[row+1][col+1]
                    if t >= 2 and t <= 6:
                        flag += 1
    

    第二个条件是四个条件中比较有难度的
    编写思路:将P2->P9放置在列表中,通过遍历列表来发现01模式,需要注意的是不要忽略在P9P2可能存在的01模式,所以在列表的最后又加了P2点,

    #条件2
    t = 0
    lis = [img[row-1][col],img[row-1][col+1],img[row][col+1],img[row+1][col+1],img[row+1][col],img[row+1]										[col-1],img[row][col-1],img[row-1][col-1],img[row-1][col]]
    for i in range(len(lis)-1):
    	if lis[i] == 0 and lis[i+1] ==1:
    		t += 1
    if t == 1:
    	flag += 1
    

    对于条件三和四,就不需要赘述了。
    下面是细化函数的完整形式:

    def xihua(img):
        h,w = img.shape
        dst = img.copy()
        for row in range(h-1):
            for col in range(w-1):
                if img[row][col] == 1:
                    flag = 0
                    #条件1
                    t = img[row-1][col-1] + img[row-1][col] + img[row-1][col+1] + img[row][col-1] + img[row][col+1]
                    + img[row+1][col-1] + img[row+1][col] + img[row+1][col+1]
                    if t >= 2 and t <= 6:
                        flag += 1
                    #条件2
                    t = 0
                    lis = [img[row-1][col],img[row-1][col+1],img[row][col+1],img[row+1][col+1],img[row+1][col],img[row+1][col-1],img[row][col-1],img[row-1][col-1],img[row-1][col]]
                    for i in range(len(lis)-1):
                        if lis[i] == 0 and lis[i+1] ==1:
                            t += 1
                    if t == 1:
                        flag += 1
                    #条件3
                    s = img[row-1][col] * img[row][col+1] * img[row+1][col]
                    if s == 0:
                        flag += 1
    
                    #条件4
                    s = img[row][col+1] * img[row+1][col] * img[row][col-1]
                    if s == 0:
                        flag += 1
                    if flag == 4:
                        dst[row][col] = 0
        temp = dst.copy()
        for row in range(h-1):
            for col in range(w-1):
                if dst[row][col] == 1:
                    flag = 0
                    # 条件1
                    t = dst[row - 1][col - 1] + dst[row - 1][col] + dst[row - 1][col + 1] + dst[row][col - 1] + dst[row][col + 1]
                    + dst[row + 1][col - 1] + dst[row + 1][col] + dst[row + 1][col + 1]
                    if t >= 2 and t <= 6:
                        flag += 1
                    # 条件2
                    t = 0
                    lis = [dst[row - 1][col], dst[row - 1][col + 1], dst[row][col + 1], dst[row + 1][col + 1],
                           dst[row + 1][col], dst[row + 1][col - 1], dst[row][col - 1], dst[row - 1][col - 1],
                           dst[row - 1][col]]
                    for i in range(len(lis) - 1):
                        if lis[i] == 0 and lis[i + 1] == 1:
                            t += 1
                    if t == 1:
                        flag += 1
                    # 条件3
                    s = dst[row - 1][col] * dst[row][col + 1] * dst[row + 1][col]
                    if s == 0:
                        flag += 1
    
                    # 条件4
                    s = dst[row][col + 1] * dst[row + 1][col] * dst[row][col - 1]
                    if s == 0:
                        flag += 1
                    if flag == 4:
                        temp[row][col] = 0
        return temp
    

    在最后我对添加优化和未优化的时间做了一下对比:

    t = time.time()
    xihua_low(imgb)
    print('未优化:',time.time()-t)
    
    t = time.time()
    xihua(imgb)
    print('优化后:',time.time()-t)
    

    输出的结果为:
    在这里插入图片描述

    展开全文
  • 精品值得阅读 Photoshop 图像处理模拟试卷 1 一单项选择题每个 2 分共 40 分 1.下面的三幅图片从左到右分别为一个图像中的两个图层以及对该图像的处理结果 那 么使用 的方法可以在不破坏图层 1 的情况下进行这样处理...
  • Photoshop CS3图形图像处理 模块四 * 操作三 制作广告背景 详细步骤 1启动Photoshop CS3打开苹果.jpg文件...Photoshop CS3图形图像处理 模块四 * 操作三 制作广告背景 3用鼠标在黑色背景中的任意地方单击删除黑色背景
  • 黑帽运算和顶帽类似,用一个结构元素(核矩阵)通过闭操作从一副图像删除前景色中比较暗的部分,留下来前景色中相对比较亮的细小部分,就是从图像的亮背景上提取细小的暗物体,黑帽这个特性也可以用于校正不均匀...

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython

    一、黑帽简介

    黑帽(Black Hat),又称“底帽”运算,其结果图像为闭运算图与原图像的差,即:
    dest=close(src,kernal)-src

    由于闭运算是先膨胀和腐蚀,因此闭运算会去除图像中的小黑点,同时也会扩大图像前景轮廓的范围,实际上也就是放大了图像前景色区域,因此从闭运算图减去原图的运算结果突出了比原图轮廓周围的区域更暗的区域,此外黑帽还能得到图像内部的小孔,或者前景色中的小黑点。因此黑帽运算可以用于提取亮背景中的细小暗物体。

    黑帽在OpenCV-Python的调用语法如下:
    morphologyEx(src, CV2.MORPH_BLACKHAT, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

    关于morphologyEx的介绍请参考《OpenCV-Python图像形态变换概述及morphologyEx函数介绍: https://blog.csdn.net/LaoYuanPython/article/details/109556425》。

    二、利用黑帽去除暗水印

    2.1、案例1:从地图中去除水印

    2.1.1、案例原图

    在如下图像(文件名:带水印中国地图.jpg):
    在这里插入图片描述
    在上述地图中存在两行比较淡的水印:“老猿Python”、“https://blog.csdn.net/LaoYuanPython”。

    2.1.2、图像黑帽运算代码

    import cv2
    import numpy as np
    
    from opencvPublic import print2DMatrix,preparePreviewImg,previewImgList,previewImg
    
    def morphologyExTest(imgObj,imgTitle=''):
        if isinstance(imgObj, str):
            img = cv2.imread(imgObj)#, cv2.IMREAD_GRAYSCALE)
            if img is None:
                img = cv2.imdecode(np.fromfile(imgObj, dtype=np.uint8), -1)
            imgTitle = imgTitle+imgObj+': '
        else:
            imgTitle = imgTitle + ': '
        if len(img.shape)==2: channel = 1
        else: channel = img.shape[2]
        if channel==3:
            img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        elif channel==4:
            img = cv2.cvtColor(img,cv2.COLOR_BGRA2GRAY)
        ksize = (3,3)
        kernal = cv2.getStructuringElement(cv2.MORPH_RECT,ksize )
        #preparePreviewImg(img,  imgTitle + '原图')
        preparePreviewImg(cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernal),imgTitle+f'黑帽,矩形核大小{ksize}')
    
    def morphologyTest():
        morphologyExTest(r'f:\pic\带水印中国地图.jpg')
        previewImgList()
    
    morphologyTest()
    

    上面代码中使用的图像预览的函数请见《OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析: https://blog.csdn.net/LaoYuanPython/article/details/109984045》的介绍。

    2.1.3、结果图像

    经上述代码处理后,该原图黑帽运算的结果图像如下:
    在这里插入图片描述
    可以看到黑帽运算后提取到了一副去除水印的完整地图图片。

    2.2、案例2:处理彩色图像

    将上述代码中处理的原图替换为如下图像(文件名:白底蓝线浅水印.jpg),并将核大小调整为7*7:
    在这里插入图片描述

    得到如下黑帽结果图像:
    在这里插入图片描述
    可以看到水印文字被去除,但留下了部分缝隙。
    对上述图像进行一次闭运算,得到如下图像:
    在这里插入图片描述
    可以看到黑帽运算中的部分缝隙得到了部分填充。上述处理过程如果使用(3,3)大小的核,则无法达到上述的效果,相关线段无法提取出来。

    以上述图像对应的灰度图像作为mask再将原图像进行自与运算,就可以得到原图像中除去水印的效果图如下:
    在这里插入图片描述
    通过调整核大小以为9*9时,上述线段交叉处的黑色部分可以填充为蓝色,效果会更好一些。

    2.3、案例3:一个黑白图的处理

    2.3.1、源图像(文件名:hill.JPG)

    在这里插入图片描述

    2.3.2、黑帽图

    在这里插入图片描述
    上图看起来都是黑色,对该图乘以4倍因子得到如下图:
    在这里插入图片描述
    可以看到提取的是原图中白色部分的周边边缘,该效果很好地体现了黑帽运算的功能。

    三、一个问题的解释

    前面介绍了,黑帽运算可以用于提取提取亮背景中的细小暗物体,通过案例3可以看到这点,但为什么反而可以在案例1和2中用于去除图像中的浅色水印呢?我们以第二个例子为例来解释:

    1. 首先我们来看看原图进行闭运算的结果图,如下
      在这里插入图片描述
      可以看到闭运算后,由于整图的亮背景色,导致闭运算后,原图的那些线条和文字几乎接近不可见,但并不是都消失了,都该图乘以0.5降低整体亮度后,得到如下图像:
      在这里插入图片描述
      可以看到文字信息不见了,但线条还在。由此可以说明,作为水印的文字信息在闭运算中被膨胀清除了,而线条在闭运算中虽然提高了亮度但还是存在的,只是与周边的颜色差异很小,无法看清,当乘以0.5后,这个差异就显现出来了,由此可见该线条的颜色灰度值接近255。

    2. 由于黑帽是闭运算结果图减原图像,由于原图像中背景色主色为白色,其像素灰度值值为255,而线条颜色为蓝色,对应灰度值为127.5(计算方法请参见《图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied Alpha(Alpha预乘)等基础概念详解》),闭运算结果图减原图像后,得到灰度值接近于255-127.5=127.5,因此黑帽运算后线条能比较清晰的显示。

    因此通过黑帽运算后,背景色变成了黑色,线条比较清晰的展示,文字消失了,从而实现了水印文字的去除。从上面的介绍可以得出,水印文字之所以能消除,是因为水印文字颜色的灰度值与背景白色的灰度值相差不大。

    四、小结

    本文简单介绍了黑帽的概念、原理和作用,以及OpenCV-Python的具体实现,并提供了两个利用黑帽去除图像水印的案例和一个提取白色图像周边黑色轮廓的案例,通过黑帽的结果图像,再作为mask去与原图像进行运算,即可以得到原图像中去除水印后的亮色图像部分。黑帽运算和顶帽类似,用一个结构元素(核矩阵)通过闭操作从一副图像中删除前景色中比较暗的部分,留下来前景色中相对比较亮的细小部分,就是从图像的亮背景上提取细小的暗物体,黑帽这个特性也可以用于校正不均匀光照的影响(请参考博文:《光照不均匀图像分割技巧2——顶帽变换和底帽变换》)。

    写作不易,敬请支持:

    如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

    四、形态变换博文传送门

    下面是老猿博文中与形态变换相关的博文列表:

    1. https://blog.csdn.net/LaoYuanPython/article/details/109441709 OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍
    2. https://blog.csdn.net/LaoYuanPython/article/details/109984045 OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析
    3. https://blog.csdn.net/LaoYuanPython/article/details/109556425 OpenCV-Python图像形态变换概述及morphologyEx函数介绍
    4. https://blog.csdn.net/LaoYuanPython/article/details/109768675 OpenCV-Python图像运算变换处理:形态学梯度运算及分类
    5. https://blog.csdn.net/LaoYuanPython/article/details/110195287 OpenCV-Python中预览超大图的程序实现方法
    6. https://blog.csdn.net/LaoYuanPython/article/details/110223709 OpenCV-Python图形图像处理:利用TopHat顶帽获取背景色中的噪点
    7. https://blog.csdn.net/LaoYuanPython/article/details/110294445 OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印
    8. https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解

    更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
    专栏网址https://blog.csdn.net/laoyuanpython/category_9979286.html

    关于老猿的付费专栏

    老猿的付费专栏《使用PyQt开发图形界面Python应用 》(https://blog.csdn.net/laoyuanpython/category_9607725.html)专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》 (https://blog.csdn.net/laoyuanpython/category_10232926.html)详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

    付费专栏文章目录:《moviepy音视频开发专栏文章目录》(https://blog.csdn.net/LaoYuanPython/article/details/107574583)、《使用PyQt开发图形界面Python应用专栏目录 》(https://blog.csdn.net/LaoYuanPython/article/details/107580932)。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》(https://blog.csdn.net/laoyuanpython/category_9831699.html)从零开始学习Python。

    如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

    跟老猿学Python、学OpenCV!

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    展开全文
  • Photoshop CS3图形图像处理 模块七 * 操作二 制作水中倒影图像 详细步骤 1启动Photoshop CS3打开古堡.jpg图像文件在图层面板中将北京图层拖动到创建新图层按钮上复制生成背景副本图层 2在工具箱中选择快速选择工具在...
  • Photoshop 图像处理模拟试卷 1 一单项选择题每个 2 分共 40 分 1.下面的三幅图片从左到右分别为一个图像中的两个图层以及对该图像的处理结果 那 么使用 的方法可以在不破坏图层 1 的情况下进行这样处理 背景图层 ...
  • 图像的距离变换实现了像素与图像区域的距离变换,使得最后生成的图像在该自己元素位置处的像素为0,临近的背景的像素具有较小的值,且随着距离的增大它的的数值也就越大。对于距离图像来说,图像中的每个像素的灰度...
  • 利用闭操作对图像进行图形元素的筛选,删除规格小于8*8的图形,保留大于8*8的图形 测试用图,图像已经二值化,图像元素为白色,背景为黑色 选择结构元素为8*8的矩阵,对测试图像进行闭操作的结果,尺寸小于8...
  • 形态学图像处理之边界提取与跟踪

    千次阅读 2019-08-11 22:07:58
    要在二值图像中提取物体的边界,容易想到的一个方法是将所有物体内部的点删除(置为背景色)。具体地说,可以逐行扫描图像,如果发现一个黑点的8个邻域都是黑点,则该点为内部点,在目标图 像中将它删除。实际上这...
  • 在我们以前的文章中,我们学习了什么是语义分割,以及如何在PyTorch中使用DeepLabv3来获得图像中检测到的对象的RGB掩码。即我们将图像中的对象标识出来。 虽然语义分割是很酷,但...1、删除背景 让我们选择一个真实的应
  • 今天将分享人体三维主动脉血管骨架提取案例。...决策树方法是迭代处理26邻域内中目标和背景体素所有可能的二进制组合,并在每次迭代时找到所有可删除的表面点,虽然该方法仅限于2D和3D,但却比形态滤波...
  • (2) 视图模块操作切面视图、三维视图与框架视图等,如用于查看背景图像、前景图像与标签图像(即分割图像)等; (3) 体绘制模块包括体数据、体绘制、颜色查找表与图像区域等子模块;其中体数据子模块用于设置图像...
  • 细化处理删除标记像素,但不会影响图像的性质(连接、方向等) 标记目标像素删除需要满足6个条件: 1.p的灰度值为255,即p不是背景; 2.x0、x2、x4、x6不全为255;(不然删除p,会造成图像空心) 3.x0-x7...
  • 标记前景为绿,背景为红色,然后标记算法会帮助你处理好细节。处理后的图片链接可以共享,以避免需要通过电子邮件发送大尺寸文件。 您可能感兴趣的相关文章 Metronic – 基于 Bootstrap 响应式后台管理模板 ...
  • 范例1-44 单循环链表中元素的删除 101 ∷相关函数:ListDelete_CL函数 1.3.14 单循环链表的清除和销毁 107 范例1-45 单循环链表的清除和销毁 107 ∷相关函数:DestroyList函数 1.3.15 仅设表尾指针循环链表的...
  • 如何基于深度学习实现图像的智能审核 背景 美团每天有百万级的图片产生量,运营人员负责相关图片的...图像智能审核一般是指利用图像处理与机器学习相关技术识别图像内容,进而甄别图像是否违规。图像智能审核旨在...
  •  对图像处理有所了解的人都知道图像的形态学处理里最为基础的膨胀和腐蚀算法。二值图像即只有黑白两种颜色组成的图像,一般的白色为内容,黑色为背景。其实简单点理解二值图像的膨胀与腐蚀,腐蚀即是删除对象边界...
  • 图像智能审核一般是指利用图像处理与机器学习相关技术识别图像内容,进而甄别图像是否违规。图像智能审核旨在建立图片自动审核服务,由机器自动禁止不符合规定(负例)的图片类型,自动通过符合规定(正例)的图片...
  • 背景 美团每天有百万级的图片产生量,运营人员负责相关...图像智能审核一般是指利用图像处理与机器学习相关技术识别图像内容,进而甄别图像是否违规。图像智能审核旨在建立图片自动审核服务,由机器自动禁止不符合...
  • 1.8.4 使用色板控制面板设置颜色 色板控制面板可以用来选取一种颜色以改变前景色或背景色选择窗口 > 色板命令系统将弹出色板控制面板 色板控制面板 认识图层控制面板 认识图层菜单 新建图层 复制图层 删除图层 1.9 ...
  • ## 背景 美团每天有百万级的图片产生量,运营人员负责相关图片的...图像智能审核一般是指利用图像处理与机器学习相关技术识别图像内容,进而甄别图像是否违规。图像智能审核旨在建立图片自动审核服务,由机器自动...
  • 背景:深度学习数据扩充,遍历文件夹中的图片进行重命名,经过对图片一系列处理后保存到另一个文件夹。在此处我们主要使用PIL库进行图像处理。将代码整合封装成类,参考一些博客在后文说明。数据增强包括:旋转,...
  • Teorex Inpaint是一款去除图片背景中瑕疵的图片处理软件。如果你的图片中有一些你不满意的瑕疵,你不必动用庞大PS来兴师动众处理,只需要使用Teorex Inpaint就可以轻松搞定。   Inpaint运用选择工具选取你希望...
  • 在做图过程中图像要产生移位,为了使图像不在移位过程中出现白边,在Photoshop中要将图像背景变大一些。 四、特殊画现的设计制作: 1、带变画、动画的立体图的设计:要做变画的图案的各种状态调好,分别放在不同的...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 240
精华内容 96
关键字:

图像处理背景删除