精华内容
下载资源
问答
  • 基于python opencv的图像目标区域自动提取
    千次阅读
    2020-12-18 13:12:25

    一、提取纸张中的内容

    一张照片中的感兴趣区域总是沿着x,y,z三个轴都有一定倾斜(如下图),要想把照片翻转到平行位置,需要进行透视变换,而透视变换需要同一像素点变换前后的坐标。由此可以想到,提取矩形区域四个角的坐标作为变换前的坐标,变换后的坐标可以设为照片的四个角落,经过投影变换,矩形区域将会翻转并充满图像。

    因此我们要解决的问题变为:提取矩形的四个角落、进行透视变换。

    提取矩形角落坐标

    矩形的检测主要是提取边缘,图片显示部分的亮度通常高于周围环境,我们可以将图片阈值化,将图片部分与周围环境明显的分别开来,这对后边的边缘检测非常有帮助。

    检测矩形并提取坐标需要对图像进行预处理、边缘检测、提取轮廓、检测凸包、角点检测。

    1、预处理转为灰度图

    由于手机拍摄的照片像素可能会很高,为了加快处理速度,我们首先将图像转化为灰度图

    image = cv2.imread(Config.src)

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    srcWidth, srcHeight, channels = image.shape

    print(srcWidth, srcHeight)

    2、中值滤波

    binary = cv2.medianBlur(gray,7)

    3、转化为二值图像

    ret, binary = cv2.threshold(binary, Config.threshold_thresh, 255, cv2.THRESH_BINARY)

    cv2.imwrite('1-threshold.png', binary, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

    此时图片已经变成了这个样子:

    可见纸张页面部分已经与背景环境分离开来。

    4、边缘检测与轮廓处理

    我们用Canny算子边缘检测,提取轮廓

    # canny提取轮廓binary = cv2.Canny(binary, 0, 60, apertureSize = 3)cv2.imwrite('3-canny.png', binary, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

    5、提取面积最大的轮廓并用多边形将轮廓包围

    模板识别:使用OpenCV实现基于特征的图像对齐

    中文简历表格提取,手写汉字识别(Python+OpenCV)

    票据图片复杂表格框识别(票据单元格切割)

    二、使用Python和OpenCV检测和标记湖面轮廓

    我们将使用OpenCV探测地图中湖面的轮廓,并标记面积最大的湖面。

    通过OpenCV提供的cv2.imread可以读入原始图片,读入的图片被表示成一个三维数组的结构,可以通过数组下标访问每一个点的颜色信息。

    图片中面区域的RGB颜色为[170,218,255],我们只需要在图片上检查具有这种颜色的区域,这里我们允许正负10的偏差。另外注意,在OpenCV颜色表示的顺序稍有不同,OpenCV采用的BGR顺序。

    OpenCV提供了cv2.inRange函数,这个函数对图片进行二值化处理,将不在阀值范围内的点变换为黑色点[0,0,0],处于范围内的点变换为白色点[255,255,255]。

    上面的代码中,cv2.inRange函数处理后图片后,调用cv2.imshow显示处理后的二值化图片:

    OpenCV提供了cv2.findContours()函数提取二值化图像的轮廓。对上面生成图片上执行这个函数就可以返回该图片的区域轮廓。由于执行该函数时会直接修改图像,因此我们复制一份图像之传给cv2.findContours();同时,OpenCV提供了cv2.drawContour()函数绘可以把轮廓叠加到另一张图片上。

    下面的代码使用cv2.findContours()函数对mask图片提取轮廓,并调用cv2.drawContour()把轮廓叠加在原始图像。

    我们可以看见所有湖面被标记,如下图:

    现在我们对返回的轮廓就进行排序,第一个轮廓就是面积最大的。

    更多相关内容
  • 该代码为基于python+opencv的目标图像区域自动提取,即利用python +opencv检测图像中的长方形画布或纸张并提取图像内容,经过测试,该算法代码能有效解决基本问题。
  • 主要介绍了python用opencv完成图像分割并进行目标物的提取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 该代码为基于python+opencv的目标图像区域自动提取,即利用python +opencv检测图像中的长方形画布或纸张并提取图像内容,经过测试,该算法代码能有效解决基本问题。亲测好用,大家快来下载吧,挺不错的一个资源哦!...
  • 背景 在现场下军棋时需要三个人,其中一个人当裁判。如果只有两个人,又想玩军棋,就需要有一个自动裁判机制。想通过手机自动识别棋子上的...在网上查到了一篇参考文献《基于python+opencv的图像目标区域自动提取(...

    背景

    在现场下军棋时需要三个人,其中一个人当裁判。如果只有两个人,又想玩军棋,就需要有一个自动裁判机制。想通过手机自动识别棋子上的文字,目前还没有看到专门实现这个功能的软件,因此想自已动手试一试。

    准备工作

    用手机拍摄了一张上面有两个棋子的图片(模拟生成一副图片后再用手机对着屏幕拍摄的,以后再对着真实的棋子拍照吧)
    在这里插入图片描述
    在网上查到了一篇参考文献《基于python+opencv的图像目标区域自动提取(本项目为提取纸张中的内容)
    参考文中的代码,并做了一些修改。对原作者的无私分享深表感谢!

    提取结果

    运行后的实际效果是得到两个图片文件
    在这里插入图片描述
    在这里插入图片描述

    python代码

    #coding:utf-8
    #用手机拍摄的两个军棋棋子照片,将这两个棋子的内容从照片中提取出来,供下一步的文本识别使用
    import cv2
    import numpy as np
    import math
    
    #配置数据
    class Config:
        def __init__(self):
            pass
        src = "photo1.jpg"
        resizeRate = 0.5
        min_area = 5000
        min_contours = 8
        threshold_thresh = 50
        epsilon_start = 10
        epsilon_step = 10
    
    '''
    对坐标点进行排序
    @return     [top-left, top-right, bottom-right, bottom-left]
    '''
    def order_points(pts):
        # initialzie a list of coordinates that will be ordered
        # such that the first entry in the list is the top-left,
        # the second entry is the top-right, the third is the
        # bottom-right, and the fourth is the bottom-left
        rect = np.zeros((4, 2), dtype="float32")
    
        # the top-left point will have the smallest sum, whereas
        # the bottom-right point will have the largest sum
        s = pts.sum(axis=1)
        rect[0] = pts[np.argmin(s)]
        rect[2] = pts[np.argmax(s)]
    
        # now, compute the difference between the points, the
        # top-right point will have the smallest difference,
        # whereas the bottom-left will have the largest difference
        diff = np.diff(pts, axis=1)
        rect[1] = pts[np.argmin(diff)]
        rect[3] = pts[np.argmax(diff)]
    
        # return the ordered coordinates
        return rect
    
    # 求两点间的距离
    def point_distance(a,b):
        return int(np.sqrt(np.sum(np.square(a - b))))
    
    # 找出外接四边形, c是轮廓的坐标数组
    def boundingBox(idx,c):
        if len(c) < Config.min_contours: 
            return None
        epsilon = Config.epsilon_start
        while True:
            approxBox = cv2.approxPolyDP(c,epsilon,True)
            #求出拟合得到的多边形的面积
            theArea = math.fabs(cv2.contourArea(approxBox))
            #输出拟合信息
            print("contour idx: %d ,contour_len: %d ,epsilon: %d ,approx_len: %d ,approx_area: %s"%(idx,len(c),epsilon,len(approxBox),theArea))
            if (len(approxBox) < 4):
                return None
            if theArea > Config.min_area:
                if (len(approxBox) > 4):
                    # epsilon 增长一个步长值
                    epsilon += Config.epsilon_step               
                    continue
                else: #approx的长度为4,表明已经拟合成矩形了                
                    #转换成4*2的数组
                    approxBox = approxBox.reshape((4, 2))                
                    return approxBox                
            else:
                print("failed to find boundingBox,idx = %d area=%f"%(idx, theArea))
                return None
    
    #-----------------------------------------------------------------------------------------------
    
    # 开始图像处理,读取图片文件
    image = cv2.imread(Config.src)
    #print(image.shape)
    
    #获取原始图像的大小
    srcHeight,srcWidth ,channels = image.shape
    
    #对原始图像进行缩放
    image= cv2.resize(image,(int(srcWidth*Config.resizeRate),int(srcHeight*Config.resizeRate))) 
    #cv2.imshow("image", image)
    
    #转成灰度图
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    
    # 中值滤波平滑,消除噪声
    # 当图片缩小后,中值滤波的孔径也要相应的缩小,否则会将有效的轮廓擦除
    #binary = cv2.medianBlur(gray,7)
    binary = cv2.medianBlur(gray,3)  
    
    #转换为二值图像
    ret, binary = cv2.threshold(binary, Config.threshold_thresh, 255, cv2.THRESH_BINARY)
    #显示转换后的二值图像
    cv2.imshow("binary", binary)
    
    # 进行2次腐蚀操作(erosion)
    # 腐蚀操作将会腐蚀图像中白色像素,可以将断开的线段连接起来
    binary = cv2.erode (binary, None, iterations = 2)
    #显示腐蚀后的图像
    cv2.imshow("erode", binary)
    
    # canny 边缘检测
    binary = cv2.Canny(binary, 0, 60, apertureSize = 3)
    #显示边缘检测的结果
    cv2.imshow("Canny", binary)
    
    # 提取轮廓
    contours,_ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # 输出轮廓数目
    print("the count of contours is  %d \n"%(len(contours)))
    
    #针对每个轮廓,拟合外接四边形,如果成功,则将该区域切割出来,作透视变换,并保存为图片文件
    for idx,c in enumerate(contours):
        approxBox = boundingBox(idx,c)
        if approxBox is None: 
            print("\n")
            continue
        
         # 获取最小矩形包络
        rect = cv2.minAreaRect(approxBox)
        box = cv2.boxPoints(rect)
        box = np.int0(box)
        box = box.reshape(4,2)
        box = order_points(box)
        print("boundingBox:\n",box)   
    
        # 待切割区域的原始位置,
        # approxPolygon 点重排序, [top-left, top-right, bottom-right, bottom-left]
        src_rect = order_points(approxBox)  
        print("src_rect:\n",src_rect)
       
        w,h = point_distance(box[0],box[1]), point_distance(box[1],box[2])
        print("w = %d ,h= %d "%(w,h))
        
        # 生成透视变换矩阵
        dst_rect = np.array([
            [0, 0],
            [w - 1, 0],
            [w - 1, h - 1],
            [0, h - 1]],
            dtype="float32")
    
        # 透视变换
        M = cv2.getPerspectiveTransform(src_rect, dst_rect)
    
        #得到透视变换后的图像
        warped = cv2.warpPerspective(image, M, (w, h))
    
        #将变换后的结果图像写入png文件
        cv2.imwrite("output/piece%d.png"%idx, warped, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
    
        print("\n")
    
                    
    print('over')
    cv2.waitKey(0)
    
    

    运行结果如下:
    在这里插入图片描述
    弹出了三个图像窗口
    1.二值化后的结果
    在这里插入图片描述
    2 腐蚀后的结果,将断开的线段连起来
    在这里插入图片描述
    3 canny 边缘检测后的结果
    在这里插入图片描述
    最后在output目录下生成了前面展示的两个结果文件
    在这里插入图片描述

    补充说明,以上代码要正常运行的前提是 numpy 与opencv-python模块已安装好。不过这两个模块的安装都很简单,用pip install numpy 与 pip install opencv-python就OK了

    展开全文
  • vtk提取感兴趣区域,三维切片提取

    提取感兴趣区域
    vtkExtractVOI

    #!/usr/bin/env python 
    # -*- coding:utf-8 -*-
    import vtk
    reader = vtk.vtkBMPReader()
    reader.SetFileName(r'E:/xujia\project\learn_vtk/lena.bmp')
    reader.Update()
    
    dims = reader.GetOutput().GetDimensions()
    
    extractVOI = vtk.vtkExtractVOI()   # 可根据用户指定的区域范围提取子图像 输入和输出都是imagedata,所以其结果可以直接作为图像保存
    extractVOI.SetInputConnection(reader.GetOutputPort())  # 接收两个输入 一个是图像数据,一个是区域大小
    extractVOI.SetVOI(int(dims[0]/4), int(3*dims[0]/4), int(dims[1]/4), int(3*dims[1]/4), 0, 0)  # 共六个参数
    extractVOI.Update()
    
    originaleActor = vtk.vtkImageActor()
    originaleActor.SetInputData(reader.GetOutput())
    
    voiActor = vtk.vtkImageActor()
    voiActor.SetInputData(extractVOI.GetOutput())
    
    originalviewport = [0.0, 0.0, 0.5, 1.0]
    voiviewport = [0.5, 0.0, 1.0, 1.0]
    
    originalRenderer = vtk.vtkRenderer()
    originalRenderer.SetViewport(originalviewport)
    originalRenderer.AddActor(originaleActor)
    originalRenderer.ResetCamera()
    originalRenderer.SetBackground(1.0, 1.0, 1.0)
    
    voiRenderer = vtk.vtkRenderer()
    voiRenderer.SetViewport(voiviewport)
    voiRenderer.AddActor(voiActor)
    voiRenderer.ResetCamera()
    voiRenderer.SetBackground(1.0, 1.0, 1.0)
    
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(originalRenderer)
    renderWindow.AddRenderer(voiRenderer)
    renderWindow.SetSize(900, 300)
    renderWindow.Render()
    renderWindow.SetWindowName('ExtractVOIExample')
    
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    style = vtk.vtkInteractorStyle()
    renderWindowInteractor.SetRenderWindow(renderWindow)
    renderWindowInteractor.SetInteractorStyle(style)
    renderWindowInteractor.Initialize()
    renderWindowInteractor.Start()
    

    在这里插入图片描述
    三维图像切面提取
    vtkImageReslice

    #!/usr/bin/env python 
    # -*- coding:utf-8 -*-
    import vtk
    reader = vtk.vtkMetaImageReader()     # 读取三维图像
    reader.SetFileName(r'E:/xujia\project\learn_vtk/brain.mhd')
    reader.Update()
    
    extent = reader.GetOutput().GetExtent()  # 获取图像范围
    spacing = reader.GetOutput().GetSpacing()    # 像素间隔
    origin = reader.GetOutput().GetOrigin()   # 原点
    
    center1 = origin[0] + spacing[0] * 0.5 *(extent[0] + extent[1])
    center2 = origin[1] + spacing[1] * 0.5 *(extent[2] + extent[3])
    center3 = origin[2] + spacing[2] * 0.5 *(extent[4] + extent[5])
    # 切片的变换矩阵,钱三列表示XYZ方向矢量,第四列为切面坐标系原点。
    axialElements = [1, 0, 0, 0,
                     0, 1, 0, 0,
                     0, 0, 1, 0,
                     0, 0, 0, 1]    # 表示切面坐标系与图像坐标系一致,且经过图像中心点center
    
    '''coronalElements = [1, 0, 0, 0,
                       0, 0, 1, 0,
                       0, -1, 0, 0,
                       0, 0, 0, 1]     # 提取平行于XZ平面的切片
    
    sagittalElements = [0, 0, -1, 0,
                        1, 0, 0, 0,
                        0, -1, 0, 0,
                        0, 0, 0, 1]     # 提取平行于YZ平面的切片
    
    obliqueElements = [1, 0, 0, 0,
                       0, 0.866025, -0.5, 0,
                       0, 0.5, 0.866025, 0,
                       0, 0, 0, 1]      # 提取斜切切片
     注意使用这些变换矩阵时,需要将第四列替换为切片经过图像的一个点坐标
    '''
    
    resliceAxes = vtk.vtkMatrix4x4()
    resliceAxes.DeepCopy(axialElements)
    resliceAxes.SetElement(0, 3, center1)
    resliceAxes.SetElement(1, 3, center2)
    resliceAxes.SetElement(2, 3, center3)
    
    reslice = vtk.vtkImageReslice()      # 图像切面的提取
    reslice.SetInputConnection(reader.GetOutputPort())
    reslice.SetOutputDimensionality(2)    # 指定输出的图像为一个二维图像
    reslice.SetResliceAxes(resliceAxes)    # 设置变换矩阵
    reslice.SetInterpolationModeToLinear()   # 线性插值
    
    '''
    reslice.SetInterpolationModeToNearestNeighbor()  最近邻插值
    reslice.SetInterpolationModeToCubic()    三次线性插值
    '''
    colorTable = vtk.vtkLookupTable()
    colorTable.SetRange(0, 1000)
    colorTable.SetValueRange(0.0, 1.0)
    colorTable.SetSaturationRange(0.0, 0.0)
    colorTable.SetRampToLinear()
    colorTable.Build()
    
    colorMap = vtk.vtkImageMapToColors()
    colorMap.SetLookupTable(colorTable)
    colorMap.SetInputConnection(reslice.GetOutputPort())
    colorMap.Update()   # 新版vtk需要添加
    
    imageActor = vtk.vtkImageActor()
    imageActor.SetInputData(colorMap.GetOutput())
    
    renderer = vtk.vtkRenderer()
    renderer.AddActor(imageActor)
    renderer.SetBackground(1.0, 1.0, 1.0)
    
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindow.Render()
    renderWindow.SetSize(640, 480)
    renderWindow.SetWindowName('ImageResliceExample')
    
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    style = vtk.vtkInteractorStyleImage()
    renderWindowInteractor.SetInteractorStyle(style)
    renderWindowInteractor.SetRenderWindow(renderWindow)
    renderWindowInteractor.Initialize()
    renderWindowInteractor.Start()
    
    

    在这里插入图片描述

    展开全文
  • 基于python+opencv的图像目标区域自动提取

    千次阅读 多人点赞 2020-02-12 22:36:00
    向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx一、提取纸张中的内容一张照片中的感兴趣区域总是沿着x,y,z三个轴都有一定倾斜(如下...


    向AI转型的程序员都关注了这个号????????????

    机器学习AI算法工程   公众号:datayx


    一、提取纸张中的内容

    一张照片中的感兴趣区域总是沿着x,y,z三个轴都有一定倾斜(如下图),要想把照片翻转到平行位置,需要进行透视变换,而透视变换需要同一像素点变换前后的坐标。由此可以想到,提取矩形区域四个角的坐标作为变换前的坐标,变换后的坐标可以设为照片的四个角落,经过投影变换,矩形区域将会翻转并充满图像。

    因此我们要解决的问题变为:提取矩形的四个角落、进行透视变换。

    提取矩形角落坐标

    矩形的检测主要是提取边缘,图片显示部分的亮度通常高于周围环境,我们可以将图片阈值化,将图片部分与周围环境明显的分别开来,这对后边的边缘检测非常有帮助。

    检测矩形并提取坐标需要对图像进行预处理、边缘检测、提取轮廓、检测凸包、角点检测。

    1、预处理转为灰度图

    由于手机拍摄的照片像素可能会很高,为了加快处理速度,我们首先将图像转化为灰度图

    image = cv2.imread(Config.src)

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    srcWidth, srcHeight, channels = image.shape

    print(srcWidth, srcHeight)

    2、中值滤波

    binary = cv2.medianBlur(gray,7)

    3、转化为二值图像

    ret, binary = cv2.threshold(binary, Config.threshold_thresh, 255, cv2.THRESH_BINARY)

    cv2.imwrite("1-threshold.png", binary, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

    此时图片已经变成了这个样子:

    可见纸张页面部分已经与背景环境分离开来。

    4、边缘检测与轮廓处理

    我们用Canny算子边缘检测,提取轮廓

    # canny提取轮廓

    binary = cv2.Canny(binary, 0, 60, apertureSize = 3) cv2.imwrite("3-canny.png", binary, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

    5、提取面积最大的轮廓并用多边形将轮廓包围

    模板识别:使用OpenCV实现基于特征的图像对齐

    中文简历表格提取,手写汉字识别(Python+OpenCV)

    票据图片复杂表格框识别(票据单元格切割)

    二、使用Python和OpenCV检测和标记湖面轮廓

    我们将使用OpenCV探测地图中湖面的轮廓,并标记面积最大的湖面。

    通过OpenCV提供的cv2.imread可以读入原始图片,读入的图片被表示成一个三维数组的结构,可以通过数组下标访问每一个点的颜色信息。

    图片中面区域的RGB颜色为[170,218,255],我们只需要在图片上检查具有这种颜色的区域,这里我们允许正负10的偏差。另外注意,在OpenCV颜色表示的顺序稍有不同,OpenCV采用的BGR顺序。

    OpenCV提供了cv2.inRange函数,这个函数对图片进行二值化处理,将不在阀值范围内的点变换为黑色点[0,0,0],处于范围内的点变换为白色点[255,255,255]。

    上面的代码中,cv2.inRange函数处理后图片后,调用cv2.imshow显示处理后的二值化图片:

    OpenCV提供了cv2.findContours()函数提取二值化图像的轮廓。对上面生成图片上执行这个函数就可以返回该图片的区域轮廓。由于执行该函数时会直接修改图像,因此我们复制一份图像之传给cv2.findContours();同时,OpenCV提供了cv2.drawContour()函数绘可以把轮廓叠加到另一张图片上。

    下面的代码使用cv2.findContours()函数对mask图片提取轮廓,并调用cv2.drawContour()把轮廓叠加在原始图像。

    我们可以看见所有湖面被标记,如下图:

    现在我们对返回的轮廓就进行排序,第一个轮廓就是面积最大的。


    阅读过本文的人还看了以下文章:

    【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

    《美团机器学习实践》_美团算法团队.pdf

    《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

    python就业班学习视频,从入门到实战项目

    2019最新《PyTorch自然语言处理》英、中文版PDF+源码

    《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

    《深度学习之pytorch》pdf+附书源码

    PyTorch深度学习快速实战入门《pytorch-handbook》

    【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

    《Python数据分析与挖掘实战》PDF+完整源码

    汽车行业完整知识图谱项目实战视频(全23课)

    李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

    笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

    《神经网络与深度学习》最新2018版中英PDF+源码

    将机器学习模型部署为REST API

    FashionAI服装属性标签图像识别Top1-5方案分享

    重要开源!CNN-RNN-CTC 实现手写汉字识别

    yolo3 检测出图像中的不规则汉字

    同样是机器学习算法工程师,你的面试为什么过不了?

    前海征信大数据算法:风险概率预测

    【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

    VGG16迁移学习,实现医学图像识别分类工程项目

    特征工程(一)

    特征工程(二) :文本数据的展开、过滤和分块

    特征工程(三):特征缩放,从词袋到 TF-IDF

    特征工程(四): 类别特征

    特征工程(五): PCA 降维

    特征工程(六): 非线性特征提取和模型堆叠

    特征工程(七):图像特征提取和深度学习

    如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

    Machine Learning Yearning 中文翻译稿

    蚂蚁金服2018秋招-算法工程师(共四面)通过

    全球AI挑战-场景分类的比赛源码(多模型融合)

    斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

    python+flask搭建CNN在线识别手写中文网站

    中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

    不断更新资源

    深度学习、机器学习、数据分析、python

     搜索公众号添加: datayx  

    长按图片,识别二维码,点关注

    展开全文
  • 利用掩膜图像来获取图像的任意区域,该程序可以直接运行。
  • python如何提取图片的特定区域

    千次阅读 2020-11-29 02:41:19
    写一个Demo例子,使用人脸数据库GENKI部分的图像做实验,该数据的数字子集GENKI-SZSL提供人脸区域的坐标和大小。提取代码如下:from PIL import Imageimport ossrc = '.'imlist = open(src + '/GENKI-SZSL_Images....
  • 今天小编就为大家分享一篇python自动截取需要区域,进行图像识别的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 利用Python分割图像目标区域

    千次阅读 多人点赞 2019-07-08 00:15:52
    1、目标 将下图中的鹰从图中分割出来 2、步骤 2.1 加载图片,进行灰度化 img_path = "bird.jpg" img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow("img",gray) 2.2...
  • 改编自详解利用OpenCV提取图像中的矩形区域(PPT屏幕等) 原文是c++版,我改成了python版,供大家参考学习。 主要思想:边缘检测—》轮廓检测—》找出最大的面积的轮廓—》找出顶点—》投影变换 import numpy as np...
  • 第一天老师:你知道么,今天有人问了我一个...在用深度学习的时候,比如说面对一张图像,对某个区域感兴趣怎么办? ~.我:他傻啊,切割出来啊,只需要训练感兴趣的部分就好啦。老师:哎,那你给我一个教程,我正好顺手
  • 这种算法能将一个连通区域细化成一个像素的宽度,用于特征提取目标拓扑表示。morphology子模块提供了两个函数用于骨架提取,分别是Skeletonize()函数和medial_axis()函数。我们先来看Skeletonize()函数。...
  • 【深度好文】Python图像处理之目标物体轮廓提取

    千次阅读 热门讨论 2021-08-08 12:15:23
    轮廓提取是边界分割中非常重要的一种处理,同时也是图像处理的经典难题,轮廓提取和轮廓跟踪的目的都是获得图像的外部轮廓特征。 2 原理 二值图像的轮廓提取的原理非常简单,就是掏空内部点:如果原图中有一点为黑,...
  • 区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标提取区域生长的原理:  区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长...
  • 在OpenCV中,一般转换图像格式为HSV格式(默认格式为BGR),再进行指定颜色的提取。 直接使用RGB提取颜色不推荐 HSV格式的介绍:HSV 为色相,饱和度,明度。 1.将一副图像从rgb颜色空间转换到hsv颜色空间 hsv...
  • 图像特征提取图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取图像中的关键信息,一些基本元件以及它们...
  • 7. 在 Python OpenCV 寻找目标区域以及边缘扩展的解决方案 针对图像的特定区域进行操作,在 OpenCV 中被称作 ROI ,即目标区域或者叫做感兴趣区域,在处理图像的时候,可以先定位一个目标区域,然后再在该区域进行...
  • OpenCV中提取目标区域并标注(python)

    千次阅读 2021-02-05 09:55:13
    提取目标区域并标注前言一、blob分析二、有关代码函数的注释与用法1、cv2.threshold()阈值处理2、cv2.findContours()轮廓检测3、cv2.boundingRect(c)矩形边框4、cv2.moments()图像的矩5、cv2.circle()画圆心6...
  • 这段代码是通过把图片转为hsv颜色空间进行颜色提取 可以改变lower_red和upper_red的第一个参数来改变要提取的颜色
  • 该教程为基于python+opencv的图像目标区域自动提取,实现自动提取一张照片中的纸张内容 环境配置: Wn10+CPU i7-6700 Pycharm2018 opencv-python 3.4.2.17 numpy 1.14.5 笔者信息:Next_Legend QQ:1219154092 ...
  • 图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标的最小外接矩形进行裁剪该如何操作呢?如下所示: 具体处理该问题的思路如下...
  • 提取红色区域为例,红色有两个区域范围,参考博客:https://blog.csdn.net/u013270326/article/details/80704754 原图为: import cv2 img = cv2.imread('/home/yasin/book.png') # range of red lower_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,378
精华内容 5,351
关键字:

python图像提取目标区域