图像进入空白图像中心的时刻(Python、OpenCV)
这是我的问题。 我尝试复制此图像(20x20): 进入一个新的创建代码(28x28空白画布)与精确的位置。我试图做的是将源图像的紫色点居中设置为一个新的(画布)图像。 这是我的代码:图像进入空白图像中心的时刻(Python、OpenCV),python,opencv,Python,Opencv,这是我的问题。 我尝试复制此图像(20x20): 进入一个新的创建代码(28x28空白画布)与精确的位置。我试图做的是将源图像的紫色点居中设置为一个新的(画布)图像。 这是我的代码: import cv2 import numpy as np import os # Read images : src image will be cloned into dst im = cv2.imread(os.path.expanduser('~\\Desktop\\cube.png')) obj = c
import cv2
import numpy as np
import os
# Read images : src image will be cloned into dst
im = cv2.imread(os.path.expanduser('~\\Desktop\\cube.png'))
obj = cv2.imread(os.path.expanduser('~\\Desktop\\testCV.png'))
# Create an all white mask
mask = 255 * np.ones(obj.shape, obj.dtype)
# The location of the center of the src in the dst
center = (int(10), int(13))
# Seamlessly clone src into dst and put the results in output
normal_clone = cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)
# Write results
cv2.imwrite(os.path.expanduser('~\\Desktop\\fin.png'), normal_clone)
这是输出:
你怎么看是不完美的有一些白色在正确的部分,并导致我一些问题,我知道问题是“面具”,我试图修改它,但当我改变一件事的代码不工作。
你知道做同样事情的其他方法吗?或者我只需要修改一下
所需的输出应与此示例类似,以重新请求为中心
谢谢以下是我使用numpy和OpenCV的结果:
结果是: (1) 对象: (2) 交叉背景: (3) 交叉背景上的对象:
以下是我使用numpy和OpenCV的结果:
结果是: (1) 对象: (2) 交叉背景: (3) 交叉背景上的对象:
这不是我的代码,我在另一个问题中发现了它,我尝试了一下,效果很好。 代码如下:
import cv2
import os
import numpy as np
def findCenter(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
th, threshed = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
_, cnts, hierarchy = cv2.findContours(threshed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
M = cv2.moments(cnts[0])
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
return (cX, cY)
img1 = cv2.imread("Path of the image you want to copy")
img2 = cv2.imread("Path of the image you want to use like a backgroud")
pt1 = findCenter(img1)
pt2 = findCenter(img2)
## (2) Calc offset
dx = (pt1[0] - pt2[0])
dy = (pt1[1] - pt2[1])
h, w = img2.shape[:2]
dst = img1.copy()
dst[dy:dy + h, dx:dx + w] = img2
cv2.imwrite(path + roi, dst)
这是最初的答案:
这不是我的代码,我在另一个问题中发现了它,我尝试了一下,效果很好。 代码如下:
import cv2
import os
import numpy as np
def findCenter(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
th, threshed = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
_, cnts, hierarchy = cv2.findContours(threshed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
M = cv2.moments(cnts[0])
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
return (cX, cY)
img1 = cv2.imread("Path of the image you want to copy")
img2 = cv2.imread("Path of the image you want to use like a backgroud")
pt1 = findCenter(img1)
pt2 = findCenter(img2)
## (2) Calc offset
dx = (pt1[0] - pt2[0])
dy = (pt1[1] - pt2[1])
h, w = img2.shape[:2]
dst = img1.copy()
dst[dy:dy + h, dx:dx + w] = img2
cv2.imwrite(path + roi, dst)
这是最初的答案:
请发布您所有的图像
cube.png
和`testCV.png',这样我们就可以重现这个问题。cube.png是白色画布(28x28)-它保存为图像。testCV它是带有紫色点的图像(该点是图像中黑色像素的平均区域),请发布您所有的图像cube.png
和`testCV.png',因此,我们可以复制question.cube.png是一个白色画布(28x28)-它保存为图像。testCV这是带有紫色点的图像(该点是图像中黑色像素的平均面积)你能分享代码吗?你在哪里复制图像广告放在画布上?你能分享代码吗?你在哪里复制图像广告放在画布上?