Reputation: 431
I would like to split images using Open CV then feed to the by PyTorch model to count object in each image. I am getting the following error message when running the code: TypeError: pic should be PIL Image or ndarray. Got <class ‘bool’>
import os
import numpy as np
import torch
from PIL import Image
from torch.utils.data import Dataset
from torchvision import transforms, utils
#from torchvision.transforms import Grayscalei
import pandas as pd
import pdb
import cv2
class CellsDataset(Dataset):
# a very simple dataset
def __init__(self, root_dir, transform=None, return_filenames=False):
self.root = root_dir
self.transform = transform
self.return_filenames = return_filenames
self.files = [os.path.join(self.root,filename) for filename in os.listdir(self.root)]
self.files = [path for path in self.files
if os.path.isfile(path) and os.path.splitext(path)[1]=='.png']
def __len__(self):
return len(self.files)
def __getitem__(self, idx):
path = self.files[idx]
sample = Image.open(path)
sample = cv2.imread(path)
b,g,r=cv2.split(sample)
sample=cv2.imwrite('sample.png', g)
#transform3 = Grayscale(num_output_channels=3)
#sample = transform3(sample) # convert to a 3 channel grayscale, as it needs to be 3 channel.
if self.transform:
sample = self.transform(sample)
if self.return_filenames:
return sample, path
else:
return sample
Upvotes: 0
Views: 337
Reputation: 535
The variable sample
is reassigned to what cv2.imwrite
returns in this line:
sample=cv2.imwrite('sample.png', g)
That replaces your ndarray with something else.
Try replacing that line with simply cv2.imwrite('sample.png', g)
without assigning the value of the evaluated expression to sample
.
Upvotes: 1