美文网首页
图像处理实战-DNN

图像处理实战-DNN

作者: YvanYan | 来源:发表于2020-08-21 11:56 被阅读0次

    在opencv中使用DNN网络对图像进行处理。

    **完整代码:https://github.com/YvanYan/image_processing/tree/master/dnn
    **


    流程:
    1.加载已经训练好的DNN模型
    2.图像预处理,使其满足DNN输入尺寸
    3.使用DNN读取图像,进行前向传播预测
    4.得到预测结果

    1.加载已经训练好的DNN模型

    # Caffe所需配置文件
    net = cv2.dnn.readNetFromCaffe("bvlc_googlenet.prototxt",
        "bvlc_googlenet.caffemodel")
    

    这里使用的是caffe框架下的DNN网络,可以根据需要更换。

    2.图像预处理,使其满足DNN输入尺寸

    image = cv2.imread(imagePaths[0])
    resized = cv2.resize(image, (224, 224))
    

    需要将图像resize成需要的大小,这里DNN网络的输入是224*244。

    3.使用DNN读取图像,进行前向传播预测

    blob = cv2.dnn.blobFromImage(resized, 1, (224, 224), (104, 117, 123))
    print("First Blob: {}".format(blob.shape))
    
    net.setInput(blob)
    preds = net.forward()
    
    • blobFromImage(image, scalefactor, size, mean, swapRB),主要是用来对图片进行预处理,包含两个主要过程:1.整体像素值减去平均值,2.通过缩放系数对图片像素值进行缩放。
      image:输入到神经网络的图片。
      scalefactor:在图片减去均值后,是否对剩下的像素值进行一定尺度的缩放。它的默认值是1,即不进行缩放。若为1/2,则表示全部缩小一半。
      size :是神经网络在训练的时候要求输入的图片尺寸。
      mean:图像的平均值。
      swapRB:OpenCV中认为我们的图片通道顺序是BGR,但是我平均值假设的顺序是RGB,所以如果需要交换R和G,那么就要使swapRB=true。

    • blobFromImages表示读取一个batch的图片。其中image参数表示一个图像的集合。

    • setInput:将处理好的图片放到网络中。

    • forward:表示采用前向传播,即得到神经网络的输出。

    4.得到预测结果

    idx = np.argsort(preds[0])[::-1][0]
    text = "Label: {}, {:.2f}%".format(classes[idx],
        preds[0][idx] * 100)
    cv2.putText(image, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX,
        0.7, (0, 0, 255), 2)
    

    对结果中每个种类的概率进行排序,取最大概率的种类作为结果。

    相关文章

      网友评论

          本文标题:图像处理实战-DNN

          本文链接:https://www.haomeiwen.com/subject/delejktx.html