Я хочу получить следующие изображения результатов из входного изображения. Получающиеся изображения окружены рамкой, которая имеет тот же размер и тип границы, но размер прямоугольника границы не совпадает. Есть ли способы сделать это? Я думаю, что мне нужно определить область, окруженную границей, в качестве первого шага. Но понятия не имею. Я пытаюсь найти его в ImageMagick.
- Входное изображение (input.png)
- Изображение результата (output1.png)
- Изображение результата (output2.png)
Обновление 1
Это не идеально, но он работал с OpenCV, как показано ниже.
import cv2 as cv
def main():
image_file = '/path/to/your/input/image.png'
src = cv.imread(image_file, cv.IMREAD_COLOR)
height, width, channels = src.shape
image_size = height * width
img_gray = cv.cvtColor(src, cv.COLOR_RGB2GRAY)
retval, dst = cv.threshold(img_gray, 1000, 255, cv.THRESH_TOZERO_INV)
dst = cv.bitwise_not(dst)
retval, dst = cv.threshold(dst, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
dst, contours, hierarchy = cv.findContours(
dst, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
xxx = 0
for i, contour in enumerate(contours):
area = cv.contourArea(contour)
if area < 50000:
continue
if image_size * 0.99 < area:
continue
if abs(i - xxx) < 10:
continue
xxx = i
x, y, w, h = cv.boundingRect(contour)
cut = src[y:y+h, x:x+w]
detector = cv.FastFeatureDetector_create()
detector.setNonmaxSuppression(False)
keypoints = detector.detect(cut)
cv.imwrite('debug_%d.png' % i, cut)
if __name__ == '__main__':
main()
Ссылка с этого сайта: https://angular.io/guide/providers
Обновление 2
У fmw42 отличный путь, но этого недостаточно для моего требования, как показано ниже. (Я не упомянул в первом посте) Единственный синий прямоугольник извлечен. Возможно, что цвет фона белый.
- Входное изображение (input2.png)
- Фактическое изображение результата (output.png)