【问题标题】:How to add a text in the captured image如何在捕获的图像中添加文本
【发布时间】:2022-08-20 19:47:34
【问题描述】:

我创建了一个应用程序来捕获图像并将其转换为铅笔素描。

我需要在为文档找到的捕获图像中添加水印,但我没有得到确切的文档,让我知道如何在图像中添加水印,否则将不胜感激。

import base64
import streamlit as st 
import numpy as np
from PIL import Image  
import cv2 

def dodgeV2(x, y):
    return cv2.divide(x, 255 - y, scale=256)

def pencilsketch(inp_img):
img_gray = cv2.cvtColor(inp_img, cv2.COLOR_BGR2GRAY)
img_invert = cv2.bitwise_not(img_gray)
img_smoothing = cv2.GaussianBlur(img_invert, (21, 21),sigmaX=0, sigmaY=0)
final_img = dodgeV2(img_gray, img_smoothing)
logo_img = cv2.imread(\"Watertext.jpg\")
logo_gray = cv2.cvtColor(logo_img, cv2.COLOR_BGR2GRAY)
logo_height, logo_width = logo_gray.shape[:2]
#y_offset = x_offset = 0 # paste to the top left of image
x_offset = final_img.shape[1] - logo_width
y_offset = 0
final_img[x_offset:x_offset+logo_height, y_offset:y_offset+logo_width] = logo_gray
return(final_img)

  • 这个问题实际上并没有使用streamlit ...你为什么要这样标记它?你为什么不标记你实际使用的其他库?

标签: python python-imaging-library streamlit


【解决方案1】:

修改您的 pencilsketch 函数,例如

def pencilsketch(inp_img):
    img_gray = cv2.cvtColor(inp_img, cv2.COLOR_BGR2GRAY)
    img_invert = cv2.bitwise_not(img_gray)
    img_smoothing = cv2.GaussianBlur(img_invert, (21, 21),sigmaX=0, sigmaY=0)
    final_img = dodgeV2(img_gray, img_smoothing)
    logo_img = cv2.imread("path/to/logo/image.jpg")
    logo_gray = cv2.cvtColor(logo_img, cv2.COLOR_BGR2GRAY)
    logo_height, logo_width = logo_gray.shape[:2]
    x_offset = y_offset = 0 # paste to the top left of image
    final_img[y_offset:y_offset+logo_height, x_offset:x_offset+logo_width] = logo_gray
    return(final_img)

如果要粘贴在右上角,请更改行

    x_offset = y_offset = 0 # paste to the top left of image

    x_offset = final_img.shape[1] - logo_width
    y_offset = 0

如果要粘贴在右下角,请更改行

    x_offset = y_offset = 0 # paste to the top left of image

    x_offset = final_img.shape[1] - logo_width
    y_offset = final_img.shape[0] - logo_height

【讨论】:

  • 添加代码后我遇到了这个问题,无法将输入数组从形状 (27,107,3) 广播到形状 (27,107)
  • @Fariya我已经更新了我的答案,因为您将捕获的图像转换为灰度,所以徽标图像必须是灰度
  • 非常感谢...如果我想更改右上角或右下角的位置怎么办
  • 您需要更改偏移量,我已经更新了我的答案,看看它
  • 你在哪一行得到了那个错误?
【解决方案2】:

使用用于混合图像的cv2.addWeighted()。 这是一个例子:

output_img = cv2.addWeighted(input_img, 1, watermark, 0.5, 0)

【讨论】:

  • 我已经尝试过,但出现此错误 cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function 'addWeighted' > Overload resolution failed: > - src1 is not a numpy array ,既不是标量 > - 参数“src1”的预期 Ptr<cv::UMat>
  • input_img 和水印图像应该具有相同的宽度和高度。因此,使用 cv2.resize() 更改图像分辨率,然后将图像传递给 cv2.addWeighted()。
【解决方案3】:

使用 OpenCV,您还可以在照片和视频上添加水印,您需要导入库并使用它。

**import cv2
img = cv2.imread('diego-jimenez-A-NVHPka9Rk-unsplash.JPG')
watermark = cv2.imread("Watermark.JPG")**

更多参考请到this blog post

【讨论】:

  • 添加此代码时遇到问题@Devang,如果您对我的代码进行更改,那就太好了
  • 我已经提到了这个链接-analyticsvidhya.com/blog/2021/08/… 请通过它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多