Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将自定义的基于openCV颜色的图像分割转换传递给keras CNN模型?_Opencv_Tensorflow_Image Processing_Keras_Computer Vision - Fatal编程技术网

如何将自定义的基于openCV颜色的图像分割转换传递给keras CNN模型?

如何将自定义的基于openCV颜色的图像分割转换传递给keras CNN模型?,opencv,tensorflow,image-processing,keras,computer-vision,Opencv,Tensorflow,Image Processing,Keras,Computer Vision,我试图在植物图片上训练Keras CNN模型。我需要在训练之前对这些图像进行预处理,因为它们包含我不希望模型了解的额外信息 解决方案:使用openCV进行基于颜色的分割,我只保留了绿色像素 def segmented(image): foto = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) hsv_foto = cv2.cvtColor(foto, cv2.COLOR_RGB2HSV) colormin=(25,50,50) c

我试图在植物图片上训练Keras CNN模型。我需要在训练之前对这些图像进行预处理,因为它们包含我不希望模型了解的额外信息

解决方案:使用openCV进行基于颜色的分割,我只保留了绿色像素

def segmented(image):
    foto = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    hsv_foto = cv2.cvtColor(foto, cv2.COLOR_RGB2HSV)

    colormin=(25,50,50)
    colormax=(86,255,255)

    mask = cv2.inRange(hsv_foto, colormin , colormax)

    result = cv2.bitwise_and(foto, foto, mask=mask)

    return result

问题: 该函数在可视化分割图像时运行良好,但我正在努力将其传递给Keras模型,以便在训练时只训练转换后的图像,而不是来自目录的原始图像

我的解决方案:我现在尝试的是将我的segmented()函数包含到keras ImageDataGenerator中:

train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    validation_split=0.2)

train_generator = train_datagen.flow_from_directory(
segmented('../input/v2-plant-seedlings-dataset/nonsegmentedv2/'),
    target_size=(64,64),
    batch_size=32,
    class_mode='categorical',
    subset='training')
还是在训练

training=model.fit_generator(
    segmented(train_generator),
    steps_per_epoch=100,
    epochs=20,
    validation_data = segmented(validation_generator), 
    validation_steps = 30,
    callbacks=[earlystopper1, checkpointer1]
   )
但我发现这个错误可能与图像读取和打开有关

TypeError                                 Traceback (most recent call    last)
  <ipython-input-47-3fc9e5fcdc32> in <module>
         1 training=model.fit_generator(
   ----> 2         segmented1(train_generator),
         3         steps_per_epoch=100,
         4         epochs=20,
         5         validation_data = validation_generator,

 <ipython-input-46-24182f9d357f> in segmented1(np_image)
         1 def segmented1(np_image):
         2 
   ----> 3     foto = cv2.cvtColor(np_image, cv2.COLOR_BGR2RGB)
         4     hsv_foto = cv2.cvtColor(foto, cv2.COLOR_RGB2HSV)
         5 

 TypeError: Expected Ptr<cv::UMat> for argument '%s'
TypeError回溯(最近一次调用)
在里面
1个培训=模型安装\u发电机(
---->2个分段1(列车发电机),
每个历元3步=100,
4个时代=20,
5验证数据=验证生成器,
分段1(np_图像)
1 def分段1(np_图像):
2.
---->3 foto=cv2.cvtColor(np_图像,cv2.COLOR_BGR2RGB)
4 hsv_foto=cv2.CVT颜色(foto,cv2.COLOR_RGB2HSV)
5.
TypeError:参数“%s”应为Ptr
我没有尝试过你的函数,但是下面是关于
预处理函数
的输入和输出的解释,这在下面的链接中提到:https():

预处理函数:将应用于每个输入的函数。 该函数将在图像大小调整和增强后运行 函数应该有一个参数:一个图像(带秩的Numpy张量 3) ,并应输出具有相同形状的Numpy张量


您可能应该稍微修改一下
segmented
函数。

您可以将分割直接应用于目录中的图像……并将生成的图像提供给您的模型……您必须将函数的名称放入数据生成器中。在
flow_from_目录
之前,请使用keras
ImageDataGenerator
在设置它的参数时,将你的
分割的
函数设置为
预处理函数
。这个源代码将帮助你:你可以编写分割的图像并使用这些文件进行训练。但是你真的想让你的网络在黑色背景上训练吗?或者你想把所有类型的随机背景增强到t软管样本?@Mika谢谢你的反馈。是的,我想在黑色背景上训练我的人际网络。你能详细介绍一下你的“imwrite”解决方案吗?@Meisam谢谢你的反馈!我刚刚编辑了我的帖子并加入了
ImageDataGenerator
。你能告诉我我应该在哪一行加入这些内容吗函数,我在keras文档中迷路了。谢谢!这正是我要找的。
train_datagen = ImageDataGenerator(
    preprocessing_function = segmented,
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    validation_split=0.2)