我試圖用opencv來匹配一個文本,并使所提供的影像的背景變成白色,然后用一個黑色的矩形來替換文本。
import cv2
import numpy as np
img_rgb = cv2.imread('./image/10.jpg'/span>)
模板 = cv2.imread('./image/matchedTxt_106.jpg')
w, h = template.shape[:-1]
res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)
閾值 = .5] 閾值 = np.where(res)
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]) 。
cv2. rectangle(img_rgb, pt, (pt[0] w, pt[1] h), (0, 0, 0), -1)
cv2.imwrite('result1.png', img_rgb)
目前,我得到的結果如下:
在這里找到我的google colab的例子:
我的模板matchedTxt_106.jpg:
我想得到以下結果:
在結果影像上,水印的位置是一個黑色的文本框,結果影像的背景是白色的。結果影像的大小應與先前的影像相同。
有沒有人建議我做錯了什么?此外,我怎樣才能獲得影像文本在初始影像上的坐標?
我很感激你的回答!
我很感激你的回答。
uj5u.com熱心網友回復:
你的主要問題是替換寬度和高度。
將w, h = template.shape[:-1]替換為:
h, w = template.shape[:-1]
在NumPy陣列shape中,高度是第一位的。
在NumPy陣列shape中,高度在前。
下面是一個代碼示例,它的結果是白色背景上的黑色矩形:
import cv2
import numpy as np
img_rgb = cv2.imread('./image/10.png') # ./image/10.jpg
模板 = cv2.imread('./image/matchedTxt_106.png') # ./image/matchedTxt_106.jpg。
h, w = template.shape[:-1] # height first.
img_bw = np.full(img_rgb.shape[:-1], 255, np.uint8) # Initialize white image
res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)
threshold = .5 閾值
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]) 。
cv2. rectangle(img_rgb, pt, (pt[0] w, pt[1] h), (0, 0, 0), -1)
cv2.rectangle(img_bw, pt, (pt[0] w, pt[1] h), 0, -1) # 在img_bw上繪制黑色(填充)矩形。
cv2.imwrite('result1.png'/span>, img_rgb)
cv2.imwrite('result_bw.png', img_bw)
結果:
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311678.html
標籤:




