OpenCv: улучшить качество вырезки объектов из большого изображения и сохранить как png - PullRequest
0 голосов
/ 09 января 2020

Я хочу выбрать одну функцию из изображения с несколькими функциями и использовать openCv, чтобы удалить все другие функции из изображения, а затем сохранить в формате png:

см. Мою текущую попытку на изображении # 2.

Проблема заключается в качестве изображения результата, которого я сейчас достигаю.

  1. многофункциональное изображение
  2. текущая попытка

Это код, который я написал и дает мне результат, представленный на изображении # 2

import numpy as np
import cv2

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))



imageawal = cv2.imread('D:/Kuliah Zelig/TA/Images/cobapotong.jpg', cv2.IMREAD_UNCHANGED)
image = cv2.cvtColor(imageawal, cv2.COLOR_BGR2GRAY)

images = cv2.GaussianBlur(image,(3,3),0,0,cv2.BORDER_DEFAULT)
denoise = cv2.fastNlMeansDenoising(images,None,30,7,21)

binary = cv2.adaptiveThreshold(denoise,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
    cv2.THRESH_BINARY,11,2)


imgreduct = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
cv2.imshow('imgreduct', imgreduct)

contours = cv2.findContours(imgreduct, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
a = 0
for cnt in contours:
    mask = np.ones(imgreduct.shape[:2], dtype="uint8")
    cv2.drawContours(mask, [cnt], -1,0,-1)
    mask_inv = cv2.bitwise_not(mask)
    imgmask = cv2.bitwise_and(imageawal, imageawal, mask=mask_inv)
    imgmasked = cv2.cvtColor(imgmask, cv2.COLOR_BGR2RGBA)
    imgmasked[np.all(imgmasked == [0, 0, 0, 255], axis=2)] = [0, 0, 0, 0]
    image = cv2.cvtColor(imgmasked, cv2.COLOR_RGBA2BGRA)

    cv2.imshow("mask", mask)
    cv2.imshow("mask_inv", mask_inv)
    cv2.waitKey(0)

    a = a +1
cv2.waitKey(0)
cv2.destroyAllWindows()
...