Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
图像进入空白图像中心的时刻(Python、OpenCV)_Python_Opencv - Fatal编程技术网

图像进入空白图像中心的时刻(Python、OpenCV)

图像进入空白图像中心的时刻(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

这是我的问题。 我尝试复制此图像(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 = 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的结果:

  • 在对象中查找坐标
  • 计算对象坐标的力矩中心
  • 计算力矩中心偏移(从src到dst)
  • 用偏移量调整坐标
  • 做切片手术

  • 结果是:

    (1) 对象:

    (2) 交叉背景:

    (3) 交叉背景上的对象:


    以下是我使用numpy和OpenCV的结果:

  • 在对象中查找坐标
  • 计算对象坐标的力矩中心
  • 计算力矩中心偏移(从src到dst)
  • 用偏移量调整坐标
  • 做切片手术

  • 结果是:

    (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这是带有紫色点的图像(该点是图像中黑色像素的平均面积)你能分享代码吗?你在哪里复制图像广告放在画布上?你能分享代码吗?你在哪里复制图像广告放在画布上?