代码之家  ›  专栏  ›  技术社区  ›  Explorer

OpenCV:如何从一个图像中复制文本并超级强加到另一个图像上

  •  0
  • Explorer  · 技术社区  · 1 年前

    我有一个只有文本的图像(总是白色),我想把文本从它复制到另一个图像。

    下面是带有徽标和图像的图像。目前,我正在拍摄这段文字的截图,并将其叠加在另一张图像上。然而,正如你所看到的,我得到了黑色矩形和文字,我如何摆脱黑色矩形区域,或者只是将文字从黑色框架复制到图像?

    enter image description here enter image description here enter image description here

    image_2_replace = cv2.imread(mask_image2)
    im2r = cv2.cvtColor(image_2_replace, cv2.COLOR_BGR2RGB)
    
    image_2_title_img = cv2.imread(image_2_title)
    image_2_titl_img = cv2.cvtColor(image_2_title_img, cv2.COLOR_BGR2RGB)
    
    im2r_title = cv2.resize(image_2_titl_img, (left_image_msg[2], left_image_msg[3]))
    
    # take the coordinate of the location where i need to put the text screenshot and add it over the image.
    
    im2r[153: 153 + 324, 
         580: 580 + 256] = im2r_title
    
    
    1 回复  |  直到 1 年前
        1
  •  2
  •   tetris programming    1 年前

    黑色背景也会被复制,因为你将整个裁剪粘贴到你的图像中:

    im2r[153: 153 + 324, 
         580: 580 + 256] = im2r_title
    

    但由于你的标题是在一个漂亮的黑色背景上,你只能复制照片中那些从黑色中突出的部分。裁剪的这些部分将具有不同于[0 0 0]的rgb代码。

    实现可能是这样的(我使用了你的屏幕截图和一些不同的裁剪位置):

    im2r[153: 153 + 70,
         280: 580 + 200,
         ] = np.where(im2r_title < [100, 100, 100], im2r[153: 153 + 70,
         280: 580 + 200,
         ], im2r_title)
    

    魔法是由 np.where(im2r_title < [100, 100, 100],... 在这里,我告诉numpy只替换im2r图片中颜色“小于”[100100100]的像素。这意味着黑色/深灰色区域不会粘贴到您的图像上。(图像下方的整个代码)

    enter image description here

    import cv2
    import numpy as np
    image_2_replace = cv2.imread("92K7B.png")
    im2r = cv2.cvtColor(image_2_replace, cv2.COLOR_BGR2RGB)
    
    image_2_title_img = cv2.imread("J33EF.png")
    image_2_titl_img = cv2.cvtColor(image_2_title_img, cv2.COLOR_BGR2RGB)
    
    im2r_title = image_2_titl_img[250:320, 200:400]
    cv2.imshow("image_2_title_img",im2r_title)
    
    # take the coordinate of the location where i need to put the text screenshot and add it over the image.
    im2r[153: 153 + 70,
         280: 580 + 200,
         ] = np.where(im2r_title < [100, 100, 100], im2r[153: 153 + 70,
         280: 580 + 200,
         ], im2r_title)
    
    cv2.imshow("image_2_title_img",im2r)
    cv2.waitKey(0)