Gabor filter with cifar10 data

Hi,
I am implementing gabor filter for cifar10 data but getting this error

error: OpenCV(4.5.1) /tmp/pip-req-build-7m_g9lbm/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function ‘cv::impl::{anonymous}::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int) [with VScn = cv::impl::{anonymous}::Set<3, 4>; VDcn = cv::impl::{anonymous}::Set<1>; VDepth = cv::impl::{anonymous}::Set<0, 2, 5>; cv::impl::{anonymous}::SizePolicy sizePolicy = cv::impl::::NONE; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]’

Invalid number of channels in input image:
‘VScn::contains(scn)’
where
‘scn’ is 1

This is the part of the code showing the error, the error specifically in this line
‘x = cv2.cvtColor(np.float32(x), cv2.COLOR_BGR2GRAY)’
#Gabor bank
num = 0
for batch_idx, (x, t) in enumerate(cifar_trainset):
current_batch_size = x.data.size()[0]
x, t = x.to(device), t.to(device)

x = cv2.cvtColor(np.float32(x), cv2.COLOR_BGR2GRAY)
#generating the gabor filtered images and saving them
num = 0
for i in range (5):
    kernel = cv2.getGaborKernel((10, 10), result_sigma[i],
    result_theta[i], result_lambdaa[i],result_gamma[i], result_psi[i], ktype=cv2.CV_32F)
    gabor_label = str(num)  


    fimg = cv2.filter2D(np.float32(x), cv2.CV_8UC3, kernel)
    img_resized = cv2.resize (fimg, (32,32))
    img_tensor = torch.from_numpy(img_resized).long()

    torch.save (img_tensor,'/home/mzidane/gabor_filtered_cifar10/gfiltered_images/gabor_filtered_images'+ str(gabor_label)+'.pt')

            
    print(gabor_label, ': theta=', result_theta[i], ': sigma=',result_sigma[i],
    ': lamda=', result_lambdaa[i], ': gamma=', result_gamma[i], ': psi=', result_psi[i])
            
    num += 1

Could you help in that?

Based on the error message it seems OpenCV is failing to convert a grayscale image to “gray” in:

x = cv2.cvtColor(np.float32(x), cv2.COLOR_BGR2GRAY)

since the input image already contains a single input channel.
You might need to load all images using 3 channels and convert them to gray afterwards in case you are working with a mixed dataset (or just skip the already gray images).