mirror of
https://github.com/283375/arcaea-offline-ocr.git
synced 2025-04-16 03:50:18 +00:00
feat: crop_black_edges_grayscale
This commit is contained in:
parent
b89e5e96d3
commit
7fb3398608
@ -5,7 +5,7 @@ import numpy as np
|
|||||||
|
|
||||||
from .types import Mat
|
from .types import Mat
|
||||||
|
|
||||||
__all__ = ["crop_xywh", "crop_black_edges"]
|
__all__ = ["crop_xywh", "crop_black_edges", "crop_black_edges_grayscale"]
|
||||||
|
|
||||||
|
|
||||||
def crop_xywh(mat: Mat, rect: Tuple[int, int, int, int]):
|
def crop_xywh(mat: Mat, rect: Tuple[int, int, int, int]):
|
||||||
@ -56,3 +56,51 @@ def crop_black_edges(screenshot: Mat):
|
|||||||
bottom -= 1
|
bottom -= 1
|
||||||
|
|
||||||
return cropped[top:bottom, left:right]
|
return cropped[top:bottom, left:right]
|
||||||
|
|
||||||
|
|
||||||
|
def is_black_edge_grayscale(
|
||||||
|
gray_value_list: np.ndarray, black_threshold: int = 50, ratio: float = 0.6
|
||||||
|
) -> bool:
|
||||||
|
return (
|
||||||
|
np.count_nonzero(gray_value_list < black_threshold)
|
||||||
|
> len(gray_value_list) * ratio
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def crop_black_edges_grayscale(
|
||||||
|
img_gray: Mat, black_threshold: int = 50
|
||||||
|
) -> Tuple[int, int, int, int]:
|
||||||
|
"""Returns cropped rect"""
|
||||||
|
height, width = img_gray.shape[:2]
|
||||||
|
left = 0
|
||||||
|
right = width
|
||||||
|
top = 0
|
||||||
|
bottom = height
|
||||||
|
|
||||||
|
for i in range(width):
|
||||||
|
column = img_gray[:, i]
|
||||||
|
if not is_black_edge_grayscale(column, black_threshold):
|
||||||
|
break
|
||||||
|
left += 1
|
||||||
|
|
||||||
|
for i in sorted(range(width), reverse=True):
|
||||||
|
column = img_gray[:, i]
|
||||||
|
if i <= left + 1 or not is_black_edge_grayscale(column, black_threshold):
|
||||||
|
break
|
||||||
|
right -= 1
|
||||||
|
|
||||||
|
for i in range(height):
|
||||||
|
row = img_gray[i]
|
||||||
|
if not is_black_edge_grayscale(row, black_threshold):
|
||||||
|
break
|
||||||
|
top += 1
|
||||||
|
|
||||||
|
for i in sorted(range(height), reverse=True):
|
||||||
|
row = img_gray[i]
|
||||||
|
if i <= top + 1 or not is_black_edge_grayscale(row, black_threshold):
|
||||||
|
break
|
||||||
|
bottom -= 1
|
||||||
|
|
||||||
|
assert right > left, "cropped width > 0"
|
||||||
|
assert bottom > top, "cropped height > 0"
|
||||||
|
return (left, top, right - left, bottom - top)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user