zoukankan      html  css  js  c++  java
  • python 图片滑动窗口

    METHOD #1: No smooth, just scaling.

    def pyramid(image, scale=1.5, minSize=(30, 30)):
        # yield the original image
        yield image
    
        # keep looping over the pyramid
        while True:
            # compute the new dimensions of the image and resize it
            w = int(image.shape[1] / scale)
            image = imutils.resize(image, width=w)
    
            # if the resized image does not meet the supplied minimum
            # size, then stop constructing the pyramid
            if image.shape[0] < minSize[1] or image.shape[1] < minSize[0]:
                break
    
            # yield the next image in the pyramid
            yield image

    METHOD #2: Resizing + Gaussian smoothing.

    # import the necessary packages
    import helpers
    from skimage.transform import pyramid_gaussian
    import argparse
    import cv2
    
    # construct the argument parser and parse the arguments
    ap = argparse.ArgumentParser()
    ap.add_argument("-i", '--image', required=True, help="Path to the image")
    ap.add_argument("-s", "--scale", type=float, default=1.5, help="scale factor size")
    args = vars(ap.parse_args())
    
    # load the image
    image = cv2.imread(args["image"])
    
    # METHOD #1: No smooth, just scaling.
    # loop over the image pyramid
    for (i, resized) in enumerate(helpers.pyramid(image, scale=args["scale"])):
        # show the resized image
        cv2.imshow("Layer {}".format(i + 1), resized)
        cv2.waitKey(0)
    
    # close all windows
    cv2.destroyAllWindows()
    
    # METHOD #2: Resizing + Gaussian smoothing.
    for (i, resized) in enumerate(pyramid_gaussian(image, downscale=2)):
        # if the image is too small, break from the loop
        if resized.shape[0] < 30 or resized.shape[1] < 30:
            break
    
        # show the resized image
        cv2.imshow("Layer {}".format(i + 1), resized)
        cv2.waitKey(0)
    
    #Run cmd python pyramid.py --image image/cat.jpg --scale 1.5

    参考

    【1】Image Pyramids with python and OpenCV - PyImageSearch
    http://www.pyimagesearch.com/2015/03/16/image-pyramids-with-python-and-opencv/
    【2】jrosebr1/imutils: A series of convenience functions to make basic image processing operations such as translation, rotation, resizing, skeletonization, and displaying Matplotlib images easier with opencv and Python.
    https://github.com/jrosebr1/imutils
    【3】Histogram of Oriented Gradients and Object Detection - PyImageSearch
    http://www.pyimagesearch.com/2014/11/10/histogram-oriented-gradients-object-detection/
    【4】Module: transform — skimage v0.14dev docs
    http://scikit-image.org/docs/dev/api/skimage.transform.html#pyramid-gaussian

    上边我们介绍了图片不压缩的情况下,重新resize到不同大小,这样做的目的是为这一节做准备,即利用滑动窗口圈住图片的文字信息内容等,例如车牌的获取。

    # import the necessary packages import helpers import argparse import time import cv2 # load the image and define the window width and height image = cv2.imread('./image/cat.jpg') (winW, winH) = (200, 128) # loop over the image pyramid for resized in helpers.pyramid(image, scale=1.5): # loop over the sliding window for each layer of the pyramid for (x, y, window) in helpers.sliding_window(resized, stepSize=32, windowSize=(winW, winH)): # if the window does not meet our desired window size, ignore it if window.shape[0] != winH or window.shape[1] != winW: continue # THIS IS WHERE YOU WOULD PROCESS YOUR WINDOW, SUCH AS APPLYING A # MACHINE LEARNING CLASSIFIER TO CLASSIFY THE CONTENTS OF THE # WINDOW # since we do not have a classifier, we'll just draw the window clone = resized.copy() cv2.rectangle(clone, (x, y), (x + winW, y + winH), (0, 255, 0), 2) cv2.imshow("Window", clone) cv2.waitKey(1) # time.sleep(0.025)

    helpers:

    '''
    Created on 2017年8月19日
    
    @author: XuTing
    '''
    # import the necessary packages
    import imutils
    from skimage.transform import pyramid_gaussian
    import cv2
    
    def pyramid(image, scale=1.5, minSize=(30, 30)):
        # yield the original image
        yield image
    
        # keep looping over the pyramid
        while True:
            # compute the new dimensions of the image and resize it
            w = int(image.shape[1] / scale)
            image = imutils.resize(image, width=w)
    
            # if the resized image does not meet the supplied minimum
            # size, then stop constructing the pyramid
            if image.shape[0] < minSize[1] or image.shape[1] < minSize[0]:
                break
    
            # yield the next image in the pyramid
            yield image
    
    def sliding_window(image, stepSize, windowSize):
        # slide a window across the image
        for y in range(0, image.shape[0], stepSize):
            for x in range(0, image.shape[1], stepSize):
                # yield the current window
                yield (x, y, image[y:y + windowSize[1], x:x + windowSize[0]])
    
    if __name__ == '__main__':
        image = cv2.imread('./image/cat2.jpg')  
        # METHOD #2: Resizing + Gaussian smoothing.
        for (i, resized) in enumerate(pyramid_gaussian(image, downscale=2)):
            # if the image is too small, break from the loop
            if resized.shape[0] < 30 or resized.shape[1] < 30:
                break
            # show the resized image
            WinName = "Layer {}".format(i + 1)
            cv2.imshow(WinName, resized)
            cv2.waitKey(10)
            resized = resized*255
            cv2.imwrite('./'+WinName+'.jpg',resized)



    效果

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    参考

    【1】Sliding Windows for Object Detection with Python and OpenCV - PyImageSearch
    http://www.pyimagesearch.com/2015/03/23/sliding-windows-for-object-detection-with-python-and-opencv/?replytocom=322532
    【2】My imutils package: A series of OpenCV convenience functions - PyImageSearch
    http://www.pyimagesearch.com/2015/02/02/just-open-sourced-personal-imutils-package-series-opencv-convenience-functions/
    【3】《SVM物体分类和定位检测》 - Hans的成长记录 - CSDN博客
    http://blog.csdn.net/renhanchi/article/category/7007663

     
  • 相关阅读:
    idea jsp无法加载<c:foreach>循环遍历数据
    java POI读取Excel文件
    Javaweb中请求的资源[/Servlet]不可用解决方案
    大作业第一阶段冲刺(一)
    hive中sql左外连接查询列值为null
    关于ECharts在jsp页面无法显示的问题
    echarts通过ajax实现数据加载
    读书笔记
    解决:[Err] 1064
    idea启动Tomcat报错Artifact testdemo1:war exploded: Error during artifact deployment. See server log for details.问题解决
  • 原文地址:https://www.cnblogs.com/jyxbk/p/8548022.html
Copyright © 2011-2022 走看看