python - 如何在 Python 中的 OpenCV2 中获取彩色图像的接缝?

标签 python image opencv

我正在编写一些代码以允许我从图像中删除接缝。目前,我的代码允许我从灰度图像中查找、突出显示和删除接缝。我需要从彩色图像中移除接缝,而我的代码不允许我这样做。谁能帮我修改我的代码以允许我这样做?
我的代码:

import numpy as np
import cv2
import math
import time

def getEdgeImage(img,margin=10):
    kernel=np.float64([[-1,0,1]])
    Ix=cv2.filter2D(img,cv2.CV_64F,kernel)
    Iy=cv2.filter2D(img,cv2.CV_64F,kernel)
    I=np.hypot(Ix,Iy)
    m=I.max()
    I[:,:margin]=m
    I[:,-margin:]=m
    return I

def getEnergyMap(img,repulseMask=None,attractMask=None):
    edges=getEdgeImage(img)
    if attractMask is not None:
        edges[attractMask==1]=-10
    if repulseMask is not None:
        edges[repulseMask==1]=235
    kernel=np.ones(3,np.float64)
    for i in range(1,len(edges)):
        minAbove=cv2.erode(edges[i-1],kernel).T[0]
        edges[i]+=minAbove
    return edges

def getSeam(img,repulseMask=None,attractMask=None):
    energyMap=getEnergyMap(img,repulseMask,attractMask)
    y=len(energyMap)-1
    x=np.argmin(energyMap[y])
    seam=[(x,y)]
    while len(seam)<len(energyMap):
        x,y=seam[-1]
        newY=y-1
        newX=x+np.argmin(energyMap[newY,x-1:x+2])-1
        seam.append((newX,newY))
    return seam

img1=cv2.imread("image.jpg") #[::2,::2]
# attractMask=img1*0
# repulseMask=img1*0
seam=getSeam(img1)
吸引和排斥蒙版目前对代码并不重要,它们只是用来手动插入像素坐标以增加或减少该坐标平面中的接缝数量。
运行此代码时出现的错误:
Traceback (most recent call last):
  File "Program.py", line 110, in <module>
    seam=getSeam(img1)
  File "Program.py", line 62, in getSeam
    energyMap=getEnergyMap(img,repulseMask,attractMask)
  File "Program.py", line 58, in getEnergyMap
    edges[i]+=minAbove
ValueError: operands could not be broadcast together with shapes (960,3) (960,) (960,3)
无论如何,我可以让它与我的代码一起使用吗?如果这是我需要做的,我会修改这些功能。

最佳答案

然后试试这个,这些是单独分配给功能的单独 channel 。

r=img1[:,:,0]
seam_r=getSeam(r)

g=img1[:,:,1]
seam_g=getSeam(g)

b=img1[:,:,2]
seam_b=getSeam(b)
在此之后,将结果单独传递给您的 post 函数。

关于python - 如何在 Python 中的 OpenCV2 中获取彩色图像的接缝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64566682/

相关文章:

python - 如何将 PySpark RDD 转换为具有未知列的 Dataframe?

python - NumPy 函数标准差的内存消耗

node.js - 读取二维码-base64图片高宽

HTML CSS 背景图像保持宽度与浏览器宽度相同

c# - 检测阈值区域

python - 产品目录 : filter by parameters

python - 使用 Python 规范化空格

image-processing - 调整大小和显示图像

python - Django 图片上传总是失败,表单永远无效

c++ - push_back Mat in another Mat时访问违规读取位置