Python dct中的断言失败(类型==CV_32FC1 | |类型==CV_64FC1)

Python dct中的断言失败(类型==CV_32FC1 | |类型==CV_64FC1),python,opencv,Python,Opencv,我正在尝试对图像进行dct。起初我犯了一个错误 在DCT中未实现该功能/特征(未实现奇数大小的DCT) 所以我用零填充图像,使其大小均匀 但现在我得到了一个错误: dct中的断言失败(类型==CV_32FC1 | |类型==CV_64FC1) 我怎样才能解决这个问题?下面是我在python中所做的工作 img = cv2.imread(filepath) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret,thresholde

我正在尝试对图像进行dct。起初我犯了一个错误

在DCT中未实现该功能/特征(未实现奇数大小的DCT)

所以我用零填充图像,使其大小均匀

但现在我得到了一个错误:

dct中的断言失败(类型==CV_32FC1 | |类型==CV_64FC1)

我怎样才能解决这个问题?下面是我在python中所做的工作

    img = cv2.imread(filepath)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret,thresholded = cv2.threshold(gray,200,255,cv2.THRESH_BINARY)

    img = cv2.cvtColor(thresholded, cv2.COLOR_GRAY2BGR)
    gray = thresholded
    gray = gray.astype('float32')

    #padding
    BLUE = [255,0,0]
    rows,cols = gray.shape
    nrows = cv2.getOptimalDFTSize(rows)
    ncols = cv2.getOptimalDFTSize(cols)
    right = ncols - cols
    bottom = nrows - rows
    bordertype = cv2.BORDER_CONSTANT
    gray = cv2.copyMakeBorder(img,0,bottom,0,right,bordertype, value = 0)
    gray = gray.astype('float32')
    dct=cv2.dct(gray)

这对我有用!找到这个

你有没有试过不要
gray=cv2.copyMakeBorder(img,0,bottom,0,right,bordertype,value=0)
因为你使用img而创建一个3通道的垫子?!?也许它不再是灰度了?
import cv2
import numpy as np
img = cv2.imread('imgColor.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,thresholded = cv2.threshold(gray,200,255,cv2.THRESH_BINARY)

img = cv2.cvtColor(thresholded, cv2.COLOR_GRAY2BGR)
gray = thresholded
gray = np.float32(gray)/255.0
dct=cv2.dct(gray)

#padding
# BLUE = [255,0,0]
# rows,cols = gray.shape
# nrows = cv2.getOptimalDFTSize(rows)
# ncols = cv2.getOptimalDFTSize(cols)
# right = ncols - cols
# bottom = nrows - rows
# bordertype = cv2.BORDER_CONSTANT
# gray = cv2.copyMakeBorder(img,0,bottom,0,right,bordertype, value = 0)
# gray = np.float32(gray)/255.0
# dct=cv2.dct(gray)