Я анализирую изображения из ускоренных испытаний на старение. Я хотел бы отобразить эту суммарную сумму электрических разрядов, которые произошли на поверхности, на диаграмме того, на что была похожа эта установка электродов и всего образца.
Общий размер изображения равен размеру образца. Это прямоугольник 5см на 120см. Это накопительное изображение.
На кумулятивном графике аспекты менее прямоугольные, так как вся активность происходит между электродами, поэтому при предварительном суммировании кадров я отбрасывал области, которые не были между электродами, для улучшения характеристик.
Это изображение было получено с помощью matplotlib со струйной раскраской. Таким образом, это была изначально матрица данных. Чтобы добавить его к эталонному изображению, я сохранил это изображение в формате png и перезагрузил его. Эта операция немного изменила соотношение сторон, но позже я изменил его размер правильно.
Я использовал эту функцию для добавления к белому прямоугольнику с размерами, такими же, как у необработанного материала. Сначала я добавил масштабированные верхний и нижний электроды к белому фоновому изображению.
def overlay(background_img, img_to_overlay_t, x, y, negpos, overlay_size=None):
bg_img = background_img.copy()
if overlay_size is not None:
img_to_overlay_t = cv.resize(img_to_overlay_t.copy(), overlay_size)
# Extract the alpha mask of the RGBA image, convert to RGB
b,g,r,a = cv.split(img_to_overlay_t)
overlay_color = cv.merge((b,g,r))
# Apply some simple filtering to remove edge noise
mask = cv.medianBlur(a,5)
#mask = np.zeros(source_img.shape[:2], np.uint8)
h, w, _ = overlay_color.shape
roi = bg_img[y:y+h, x:x+w]
## works sort of but with removed details
#mask = mask.astype(np.int8)
# Black-out the area behind the logo in our original ROI
img1_bg = cv.bitwise_and(roi.copy(),roi.copy(),mask = cv.bitwise_not(mask))
# Mask out the logo from the logo image.
img2_fg = cv.bitwise_and(overlay_color,overlay_color,mask = mask)
img2_fg = img2_fg.astype(np.float32)
img1_bg = img1_bg.astype(np.float32)
if negpos == False:
bg_img[y:y+h, x:x+w] = cv.subtract(img1_bg, img2_fg)
else:
bg_img[y:y+h, x:x+w] = cv.add(img1_bg, img2_fg)
return bg_img
Это дает эту диаграмму.
До этого момента все работало нормально. Проблема пыталась добавить кумулятивный между электродами. Моя проблема заключается в том, что я не могу вставить этот кумулятивный график в эталонное изображение электродов и общий размер выборки. Я получаю
OpenCV(3.4.1) Error: Assertion failed ((mtype == 0 || mtype == 1) && _mask.sameSize(*psrc1))
в
img1_bg = cv.bitwise_and(roi.copy(),roi.copy(),mask = cv.bitwise_not(mask))
Я могу это исправить, применив маску к uint8 или int8.
mask = mask.astype(np.uint8)
У этого есть свои проблемы, так как синяя часть разряда теряет все функции и в основном состоит только из 3 разных цветов.
Это результат, который я хотел бы отобразить / сохранить в конце. Я понятия не имею, как добраться до него.