从流程中排除某些维度的图像(OpenCV,Python) [英] Exclude images of certain dimensions from process (OpenCV, Python)

查看:484
本文介绍了从流程中排除某些维度的图像(OpenCV,Python)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用下一个代码,我可以拍摄一张图像并将其分成包含感兴趣区域的各种较小图像。

Using the next code I can take an image and separate it in various smaller images containing area's of interest.

import cv2
import sys

sys.path.insert(0, 'C:\\Users\\Bob\\Desktop\\Project')
sys.path.insert(0, 'C:\\Users\\Bob\\Desktop\\Project\\FOLDER')
sys.path.insert(0, 'C:\\Users\\Bob\\Desktop\\Project\\READER')

import FOLDER.folders
import READER.extractor

timestr = FOLDER.folders.timestr

################## AREA 1 ##################

# Load the image
img = cv2.imread('C:\\Users\\Bob\\Desktop\\Destination\\' + str(timestr) + '\\EXTRACTED\\' + 'area1.png')

# convert to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# smooth the image to avoid noises
gray = cv2.medianBlur(gray,5)

# Apply adaptive threshold
thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2)
thresh_color = cv2.cvtColor(thresh,cv2.COLOR_GRAY2BGR)

# apply some dilation and erosion to join the gaps - change iterations value to detect more or less area's
thresh = cv2.dilate(thresh,None,iterations = 15)
thresh = cv2.erode(thresh,None,iterations = 15)

# Find the contours
image,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# For each contour, find the bounding rectangle and draw it
idx =0

for cnt in contours:
    idx += 1
    x,y,w,h = cv2.boundingRect(cnt)
    roi = gray[y:y + h, x:x + w]
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
    cv2.rectangle(thresh_color,(x,y),(x+w,y+h),(0,255,0),2)
    cv2.imwrite('C:\\Users\\Bob\\Desktop\\Destination\\' + str(timestr) + '\\EXTRACTED\\ex_area1' + str(idx) + '.png',roi)

这是一个例子:

已加载图片

输出

代码还提供了一些我不想要的小图片(假设是文物)。所有这些图像都低于某些尺寸。

The code give out also some minor images (let's say artifacts) which I don't want. All these images are below some certain dimensions.

我的问题是:我必须添加到上面的代码删除这些图像?要删除下面的图像,例如下一个尺寸:250(宽度)X 60(高度)像素?

My question is: what I have to add to the code above to delete these images ? To delete images which is under, for example, the next dimensions: 250(width) X 60(height) pixels ?

谢谢

提示:使用此代码检测区域:改进文本区域检测(OpenCV,Python)

Tip: Used this code to detect the areas: Improve text area detection (OpenCV, Python)

推荐答案

首先不要写它们。仅写入60 * 250以上的图像。

Just dont write them in the first place. Write only images above 60*250.

   for cnt in contours:
        idx += 1
        x,y,w,h = cv2.boundingRect(cnt)
        roi = gray[y:y + h, x:x + w]
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        cv2.rectangle(thresh_color,(x,y),(x+w,y+h),(0,255,0),2)
        if (w*h>250*60):    #change this for proper settings
           cv2.imwrite('C:\\Users\\Bob\\Desktop\\Destination\\' + str(timestr) 
            + '\\EXTRACTED\\ex_area1' + str(idx) + '.png',roi)

这篇关于从流程中排除某些维度的图像(OpenCV,Python)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆