试图加入3张图片

时间:2018-05-05 20:44:59

标签: python numpy opencv image-processing

我正在分析加速老化测试的图像。我想在电极和总样品设置的图表上显示表面上发生的累积放电总量,以供参考。

图片的总大小等于样本的大小。它是一个5厘米×120厘米的矩形。这是累积图像。

enter image description here

在累积图中,由于所有活动都发生在电极之间,因此方面不那么矩形,所以当先前对帧进行求和时,我拒绝了不在电极之间的区域,以提高性能。

该图像是使用具有喷射着色的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

它产生了这个图。 enter image description here

到目前为止,一切都很顺利。问题是试图在电极之间增加累积。我的问题在于无法将累积图插入电极的参考布局图像和总样本大小。我得到了

OpenCV(3.4.1) Error: Assertion failed ((mtype == 0 || mtype == 1) && _mask.sameSize(*psrc1))

at

img1_bg = cv.bitwise_and(roi.copy(),roi.copy(),mask = cv.bitwise_not(mask))

我可以通过将掩码转换为uint8或int8来解决这个问题 mask = mask.astype(np.uint8)

这有它自己的问题,因为蓝色放电部分最终会丢失所有功能,并且基本上只包含3种不同的颜色。

这是我想在最后显示/保存的结果。我不知道怎么做到这一点。

enter image description here

0 个答案:

没有答案