zoukankan      html  css  js  c++  java
  • pytorch opencv基础

    import torch
    import numpy
    from torch.utils.data import TensorDataset
    from troch.utils.data import DataLoader
    
    
    #TensorDataset将数据和标签封装到一起,再用DataLoader封装后即可在for中实现每次一个batch_size
    train = TensorDataset(train_x, train_y)
    train = DataLoader(train, batch_size = k, shuffle = True)
    
    test = TensorDataset(test_x, test_y)
    test = DataLoader(test, batch_size = k, shuffle = True)
    
    model = torch.nn.Sequential(
        torch.nn.Linear(128, 64),
        torch.nn.Sigmoid(),
        torch.nn.Linear(64, 10))
    
    
    loss = torch.nn.MSELoss()
    optimizer = torch.optim.Adam()
    
    for i in range(100):
        for x, y in train:
            #model.train():训练时加上,会正常使用Batch Normalization 和 Dropout
            #model.eval():测试时加上,不会使用Batch Normalization 和 Dropout
            model.train()
            pred = model(x)
            loss_value = loss(pred, y)
            loss_value.backward()
            optimizer.step()
        for xt, yt in test:
            model.eval()
            test_pred = model(test_x)
            test_loss_value = loss(test_pred)

    opencv读取视频

    import cv2
    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    
    vc = cv2.VideoCapture('C:/Users/Dell/Downloads/2.mp4')
    
    
    if vc.isOpened():
        flag, frame = vc.read()
    else:
        flag = False
    
    while(flag):
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('name', frame)
        if cv2.waitKey(10) & 0xFF == 27:
            break
        flag, frame = vc.read()
    vc.release()
    cv2.destroyAllWindows()

    图像合并:

    img1 = cv2.imread('C:/Users/Dell/Downloads/1.jpg')
    img2 = cv2.imread('C:/Users/Dell/Downloads/3.jpg')
    
    img1 = cv2.resize(img1, (700, 533)) #合并之前先调整到一致的大小
    
    
    img = cv2.addWeighted(img1, 0.4, img2, 0.6, 0) #img = 0.4 * img1 + 0.6 * img2 + 0
    cv2.imshow('img',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    阈值处理:

    img1 = cv2.imread('C:/Users/Dell/Downloads/1.jpg')
    img2 = cv2.imread('C:/Users/Dell/Downloads/3.jpg')
    
    ret, img = cv2.threshold(img1, 127, 255, cv2.THRESH_TOZERO_INV)
    cv2.imshow('img', img)
    
    if cv2.waitKey(0) & 0xFF == 27:
        cv2.destroyAllWindows()
    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    import cv2
    import numpy as np
    
    
    img1 = cv2.imread('C:/Users/Dell/Downloads/1.jpg')
    img2 = cv2.imread('C:/Users/Dell/Downloads/3.jpg')
    
    
    
    #均值滤波,用3 * 3的权值为全1的卷积核做内积,将结果求均值
    # img = cv2.blur(img1, (3, 3))
    # cv2.imshow('img', img)
    
    
    #方框滤波,当normalize = True时,和均值滤波一样
    #当normalize = False时,内积后不求平均,若超过255,则赋值为255
    # img = cv2.boxFilter(img1, -1, (3, 3), normalize = False)
    # cv2.imshow('img', img)
    
    
    #高斯滤波:卷积核内的数值满足高斯分布,更重视中心位置,离中心越远重要性越低
    # img = cv2.GaussianBlur(img, (5, 5), 1)
    # cv2.imshow('img', img)
    
    #中值滤波:用卷积核框起来的数中的中值代替
    
    # img = cv2.medianBlur(img1, 5)
    # cv2.imshow('img', img)
    
    
    #将几张图片一起显示,注意img1和img2大小要相等,可以先resize
    
    img1 = cv2.resize(img1, (700, 533)) #合并之前先调整到一致的大小
    
    res = np.hstack((img1, img2)) #横着一排
    res = np.vstack((img1, img2)) #竖着一排
    cv2.imshow('all', res)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    腐蚀操作:

    #腐蚀操作:在任意处画框,将在框内的边界内的点腐蚀,且此时框同时框住边界外和边界内
    kernel = np.ones((3, 3), np.uint8)
    img = cv2.erode(img1, kernel, iterations = 1)  #原图片,框的大小,迭代次数(腐蚀次数) = 1

    膨胀操作:

    img_dilate = cv2.dilate(img1, kernel, iterations = 1) #和腐蚀传入的参数一样

    开运算和闭运算:

    kernel = np.ones((5, 5), dtype = np.uint8)
    
    #开运算:先腐蚀,再膨胀
    img_open = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
    
    #闭运算:先膨胀,再腐蚀
    img_close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
    
    
    
    cv2.imshow('img', img_open)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    梯度运算:

    #梯度运算:结果 = 膨胀 - 腐蚀
    img_grad = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

    礼帽和黑帽:

    #礼帽:原始图像 - 开运算
    img_tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
    
    
    #黑帽:闭运算 - 原始图像
    img_blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

    Sobel算子求图像边缘:

    分别为水平和垂直的卷积核,其中A为原始图像,Gx和Gy为替代3 * 3大小的中间值

    #Sobel算子:用于边缘检测(灰度值变化剧烈的地方就是边缘)
    #(原图像, 深度:-1表示与原图像深度相同, 水平, 垂直, 卷积核大小:为1 3 5 7)
    #水平和垂直不能同时为1,各自求完相加即可
    
    #img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    
    sobelx = cv2.Sobel(img1, -1, 1, 0, ksize = 3)
    #需要abs的原因为:3 * 3的kerbel为-1 0 1 内积时是左边减右边,若左边小,则结果就会为负值,而灰度值为0 - 255,因此取个绝对值
    #                                -2 0 2  垂直时同理
    #                                -1 0 1
    sobelx = cv2.convertScaleAbs(sobelx)
    sobely = cv2.Sobel(img1, -1, 0, 1, ksize = 3)
    sobely = cv2.convertScaleAbs(sobely)
    sobel = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)
    cv2.imshow('sobelx', sobel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Scharr算子:

    #Scharr算子:scharr与sobel算子思想一样,只是卷积核的系数不同,
    #提取边界也更加灵敏,能提取到更细小的边界,但请注意,越是灵敏就越是可能误判,卷积核默认3 * 3
    
    scharrx = cv2.Scharr(img1, -1, 1, 0)
    scharry = cv2.Scharr(img1, -1, 0, 1)
    scharrx = cv2.convertScaleAbs(scharrx)
    scharry = cv2.convertScaleAbs(scharry)
    
    scharr = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)
    cv2.imshow('scharr', scharr)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Laplacian算子:

    #Laplacian算子:没有水平和垂直之分
    laplacian = cv2.Laplacian(img1, -1)
    cv2.imshow('laplacian', laplacian)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    高斯金字塔:

    向下采样(将图像变小):将图像与高斯内核卷积,之后将所有偶数行和列去掉

    向上采样(放大):将图像在每个方向都扩大为原来的两倍,新增的行和列用0填充

    img_u = cv2.pyrUp(img1)
    img_d = cv2.pyrDown(img1)
    
    cv2.imshow('img', img_d)
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    淘宝客服务费和佣金的区别是什么
    java编程出现的错误对应的解决方法
    若遇到APP无法抓包怎么办,可以通过安装drony 进行转发抓包
    Android逆向—苏宁金融app的data参数分析
    GMSSL 支持SM2/SM3/SM4
    Frida安装和使用
    JS 解析 bytearray 成字符串
    Pytorch-tensor的创建,索引,切片
    深度学习实战之线性回归1
    CCF CSP 201803-2 碰撞的小球
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/15240279.html
Copyright © 2011-2022 走看看