Подходят ли преобразователи sklearn для преобразования входного изображения в некоторый преобразованный вывод, включая дополнительную информацию? Например, возможно ли применить преобразование Хафа Круга к изображению, используя opencv , и вывести изображение, включающее найденные окружность (и) и информацию о окружности (центр и радиус)? Есть ли подходящий python тип данных или pandas (например, DataFrame), полезный для возврата значений другого типа (изображение / матрица и список значений с плавающей запятой), или есть лучший способ, например использование numpy?
from sklearn.base import BaseEstimator, TransformerMixin
import cv2
import numpy as np
#import pandas as pd # Is pandas helpful?
class HoughTransformer(BaseEstimator, TransformerMixin):
def __init__(self):
pass
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
"""perform the transformation and return an array with different types"""
# Prepare transformed output
# What's a suitable data type to use for the transformed output?
# Should include image with circles and circle information (center and radius) for each image
Xt = [] # Python lists work, but is there are more efficient way?
for img in X:
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
Xt.append([cimg, circles])
return Xt
Другой способ, о котором я мог подумать, - это использовать два преобразователя: один для вывода только изображения с кружками в нем, а другой для вывода информации о окружностях (центр и радиус) , Затем используйте sklearn FeatureUnion , чтобы объединить результаты. Однако каждый из этих преобразователей будет использовать преобразование кругов Хафа из opencv, что будет избыточным вычислением. Поэтому я хотел бы использовать изображение и побочный результат круговой информации от одного преобразователя. Пожалуйста, дайте мне знать лучшие практики для решения этой проблемы.