Python 解析cifar-10并将imgs更改为HSV
我正在阅读带有此代码的cifar-10数据集,希望找到一种方法将其更改为HSV。我试图将数据和标签列表放在函数之外,但我遇到了以下错误:Python 解析cifar-10并将imgs更改为HSV,python,image-processing,hsv,Python,Image Processing,Hsv,我正在阅读带有此代码的cifar-10数据集,希望找到一种方法将其更改为HSV。我试图将数据和标签列表放在函数之外,但我遇到了以下错误:UnboundLocalError:assignment之前引用的局部变量“data” 如何取出这些列表,以便我可以更改为HSV,然后更改为数据集的直方图 导入pickle 将numpy作为np导入 从os.path导入联接 从操作系统导入listdir 将matplotlib.pyplot作为plt导入 从TQM导入TQM 将结构导入为st 类数据读取器: 定
UnboundLocalError:assignment之前引用的局部变量“data”
如何取出这些列表,以便我可以更改为HSV,然后更改为数据集的直方图
导入pickle
将numpy作为np导入
从os.path导入联接
从操作系统导入listdir
将matplotlib.pyplot作为plt导入
从TQM导入TQM
将结构导入为st
类数据读取器:
定义初始化(self,root\u dir,type='cifar-100'):
self.root\u dir=root\u dir
self.type=type
def从pickle(自身)获取命令:
self.train\u dict=unpickle(join(self.root\u dir,'train'))
self.test\u dict=unpickle(join(self.root\u dir,'test'))
def获取列车数据(自身):
如果self.type==“cifar-100”:
self.get_dict_from_pickle()
data=np.array(self.train_dict[b'data'])
lbls\u sub=np.array(self.train\u dict[b'fine\u labels'))
lbls\u class=np.array(self.train\u dict[b'粗略标签])
返回数据,lbls\U类,lbls\U子类
elif self.type==“cifar-10”:
#数据=[]
#标签=[]
打印(“阅读”)
对于TQM中的文件(listdir(self.root\u dir)):
如果文件分割(“”“)[0]=“数据”:
dict=unpickle(join(self.root\u dir,file\udir))
data.extend(dict[b'data']))
labels.extend(dict[b'labels']))
返回np.array(数据),np.array(标签),无
elif self.type=='mnist':
返回self.read_mnist()
def获取测试数据(自身):
如果self.type==“cifar-100”:
self.get_dict_from_pickle()
data=np.array(self.test_dict[b'data'])
lbls\u sub=np.array(self.test\u dict[b'fine\u labels']))
lbls\u class=np.array(self.test\u dict[b'rough\u labels')
返回数据,lbls\U类,lbls\U子类
elif self.type==“cifar-10”:
数据=np.空(形状=(03072))
标签=[]
对于listdir中的文件(self.root\u dir):
如果文件分割(“”“)[0]=“测试”:
dict=unpickle(join(self.root\u dir,file\udir))
data=np.vstack((数据,dict[b'data']))
打印(数据[data.shape[0]-1])
labels.append(dict[b'labels']))
返回np.array(数据),np.array(标签),无
def将_重塑为_图(自身、数据):
如果self.type==“mnist”:
返回data.shape(data.shape[0],28,28).astype(“uint8”)
返回数据。重塑(data.shape[0],3,32,32)。转置(0,2,3,1)。aType(“uint8”)
def plot_imgs(自身,输入数据,n,随机=假):
data=np.array([d代表数据中的d])
数据=自身。将图重塑为图(数据)
x1=最小值(n//2,5)
如果x1==0:
x1=1
y1=(n//x1)
x=最小值(x1,y1)
y=最大值(x1,y1)
图,ax=plt.子批次(x,y,figsize=(5,5))
i=0
对于范围(x)内的j:
对于范围(y)中的k:
如果是随机的:
i=np.随机选择(范围(长度(数据)))
ax[j][k]。设置轴为off()
ax[j][k].imshow(数据[i:i+1][0])
i+=1
plt.show()
def plot_img(自身,数据):
如果self.type!='mnist':
assert data.shape==(3072,)
数据=数据。重塑(13072)
data=data.shape(data.shape[0],3,32,32).转置(0,2,3,1).aType(“uint8”)
elif self.type==“mnist”:
assert data.shape==(28*28,)
data=data.reformate(1,28,28).astype('uint8')
图,ax=plt.子批次(图尺寸=(5,5))
ax.imshow(数据[0])
plt.show()
def取消勾选(文件):
进口泡菜
打开(文件“rb”)作为fo时:
dict=pickle.load(fo,encoding='bytes')
返回指令
这是我在最后做的事情,它起了作用
"""
从keras.dataset导入cifar10
将matplotlib.pyplot作为plt导入
进口cv2
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
for i in range(0,50000):
hsv_image = cv2.cvtColor(x_train[i] , cv2.COLOR_RGB2HSV)
hue , sat , val = hsv_image [:,:, 0 ], hsv_image [:,:, 1 ],
hsv_image [:,: , 2 ]
import numpy as np
plt.figure(figsize=(10,8))
plt.subplot(311) #plot in the first cell
plt.subplots_adjust(hspace=.5)
plt.title("Hue")
plt.hist(np.ndarray.flatten(hue), bins=8)
plt.subplot(312) #plot in the second cell
plt.title("Saturation")
plt.hist(np.ndarray.flatten(sat), bins=4)
plt.subplot(313) #plot in the third cell
plt.title("Luminosity Value")
plt.hist(np.ndarray.flatten(val), bins=2)
plt.show()
您可以使用OpenCV。
image=cv2.cvtColor(image,cv2.COLOR\u BGR2HSV)
但如何达到这一点是我遇到的困难?我将其添加到数据读取器文件中,但给了我此错误“TypeError:参数“%s”的预期Ptr”“你知道那是什么错误吗?我把它放在这里:elif self.type=='cifar-10':data=[]labels=[]打印tqdm(listdir(self.root\u dir))中文件的“读取”:if file.split(''[0]='data':dict=unpickle(join(self.root\u dir,file))data.extend(dict[b'data'])扩展(dict[b'labels'])数据=cv2。cvtColor(数据,cv2.COLOR\u RGB2HSV)尝试data=data.astype(np.uint8)