Указать свою операционную систему | WINDOWS 10 x 64 |
Указать версию Python | 3.8.0 |
Укажите версию библиотек с которыми работаете |
Код:
|
Вставьте фрагмент кода который у вас имеется на данный момент | Описание вопроса ниже |
Еще раз здравствуйте.
Свои основные изыскания в этом топике (https://itfy.org/threads/kak-vydelit-chast-massiva-iz-dvumernogo-massiva.1806/), но я так понимаю, я неправильно выразился и непонятно вообще, что я хотел.
А вопрос в следующем: есть капча, в каждой из которых 2 числа. Я уже могу выделять контуры. Теперь моя задача сохранить эти контуры отдельно в файл. Есть ли какой-то способ для этого?
Сам код:
Python:
from PIL import Image
import pytesseract
import cv2
import os
import pyscreenshot as ps
import numpy as np
import time
import sys
import random
from CoolFilePathParser import CFPP
from Config import Config
from jprint import jprint
from imagelab import image_lab_file, image_lab_image
import json
window_width = 400
window_height = 300
def get_contour_precedence(contour, cols):
tolerance_factor = 10
origin = cv2.boundingRect(contour)
return ((origin[1] // tolerance_factor) * tolerance_factor) * cols + origin[0]
def get_random_file():
numbers_dirs = os.listdir(Config.collections_dir)
random.shuffle(numbers_dirs)
number_path = Config.collections_dir + '/' + numbers_dirs[0]
captcha_dirs = os.listdir(number_path)
random.shuffle(captcha_dirs)
captcha_name = captcha_dirs[0]
return str(number_path + '/' + captcha_name)
dark41_file = Config.testcaptcha_dir + '/dark41.jpg'
light41_file = Config.testcaptcha_dir + '/light41.jpg'
captcha_path = get_random_file()
print(captcha_path)
cfpp = CFPP(captcha_path)
ParsePath = cfpp.get_cleanData
jprint(ParsePath, 'ParsePath')
# Оригинал изображения
image_light41 = cv2.imread(captcha_path, cv2.IMREAD_COLOR)
image_light41_big = cv2.resize(image_light41, (window_width, window_height))
cv2.imshow('image_light41_big', image_light41_big)
# Контрастируем через LAB
image_light41_lab = image_lab_file(filename=captcha_path)
image_light41_lab_gray = cv2.cvtColor(image_light41_lab, cv2.COLOR_RGB2GRAY)
image_light41_lab_gray_big = cv2.resize(image_light41_lab_gray, (window_width, window_height))
cv2.imshow('image_light41_lab_gray_big', image_light41_lab_gray_big)
# Убираем шумы
se = cv2.getStructuringElement(cv2.MORPH_RECT, (8, 8))
bg = cv2.morphologyEx(image_light41_lab_gray_big, cv2.MORPH_DILATE, se)
out_gray = cv2.divide(image_light41_lab_gray_big, bg, scale=255)
cv2.imshow('out_gray', out_gray)
out_binary = cv2.threshold(out_gray, 0, 255, cv2.THRESH_OTSU)[1]
cv2.imshow('out_binary', out_binary)
# Выделяем контуры
rgb = cv2.cvtColor(out_binary, cv2.COLOR_GRAY2RGB)
cv2.imshow('rgb COLOR_GRAY2RGB', rgb)
hsv = cv2.cvtColor(rgb, cv2.COLOR_RGB2HSV)
cv2.imshow('hsv COLOR_RGB2HSV', hsv)
hsv_min = np.array((0, 0, 0), np.uint8)
hsv_max = np.array((20, 20, 20), np.uint8)
thresh = cv2.inRange(hsv, hsv_min, hsv_max)
contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
image_light41_big_sort = image_light41_big.copy()
image_light41_big_sort_2 = image_light41_big.copy()
cv2.drawContours(image_light41_big, contours, -1, (255, 0, 0), 1, cv2.LINE_AA, hierarchy, 1)
cv2.imshow('contours', image_light41_big) # выводим итоговое изображение в окно
cv2.waitKey(0)
cv2.destroyAllWindows()
Результат его работы: