Merge in RR/vidocp from layout_detection_version_2 to master
Squashed commit of the following:
commit d443e95ad8143bed3efc74d9e38640498d8d16bf
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Sat Feb 5 20:16:13 2022 +0100
readme updated
commit 953ad696932454ce851544ed016f9e64bcc12080
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Sat Feb 5 20:14:59 2022 +0100
added layot parsing logic
78 lines
1.5 KiB
Python
78 lines
1.5 KiB
Python
import cv2
|
|
from matplotlib import pyplot as plt
|
|
|
|
|
|
def show_mpl(image):
|
|
|
|
fig, ax = plt.subplots(1, 1)
|
|
fig.set_size_inches(20, 20)
|
|
ax.imshow(image)
|
|
plt.show()
|
|
|
|
|
|
def show_cv2(image):
|
|
|
|
cv2.imshow("", image)
|
|
cv2.waitKey(0)
|
|
|
|
|
|
def copy_and_normalize_channels(image):
|
|
|
|
image = image.copy()
|
|
try:
|
|
image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
|
|
except cv2.error:
|
|
pass
|
|
|
|
return image
|
|
|
|
|
|
def draw_contours(image, contours):
|
|
|
|
image = copy_and_normalize_channels(image)
|
|
|
|
for cont in contours:
|
|
cv2.drawContours(image, cont, -1, (0, 255, 0), 4)
|
|
|
|
return image
|
|
|
|
|
|
def draw_rectangles(image, rectangles):
|
|
|
|
image = copy_and_normalize_channels(image)
|
|
|
|
for rect in rectangles:
|
|
x, y, w, h = rect
|
|
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
|
|
|
|
return image
|
|
|
|
|
|
def draw_stats(image, stats, annotate=False):
|
|
|
|
image = copy_and_normalize_channels(image)
|
|
|
|
keys = ["x", "y", "w", "h"]
|
|
|
|
def annotate_stat(x, y, w, h):
|
|
|
|
for i, (s, v) in enumerate(zip(keys, [x, y, w, h])):
|
|
anno = f"{s} = {v}"
|
|
xann = int(x + 5)
|
|
yann = int(y + h - (20 * (i + 1)))
|
|
cv2.putText(image, anno, (xann, yann), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
|
|
|
|
def draw_stat(stat):
|
|
|
|
x, y, w, h, area = stat
|
|
|
|
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
|
|
|
|
if annotate:
|
|
annotate_stat(x, y, w, h)
|
|
|
|
for stat in stats[2:]:
|
|
draw_stat(stat)
|
|
|
|
return image
|