乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      如何轉(zhuǎn)換opencv的圖片格式在pytorch中使用

       印度阿三17 2021-03-15

      在這里插入圖片描述
      首先,如上圖所示,opencv讀入的圖像為 RGB格式,但是我們?cè)趐ytorch中進(jìn)行圖像處理時(shí),要先將RGB轉(zhuǎn)換成BGR,然后在使用img = Image.fromarray(np.uint8(self.camimg)) 將array轉(zhuǎn)換成image格式,這樣轉(zhuǎn)換圖片格式后才能夠在pytorch中使用。

      一般圖像的存儲(chǔ)方式是H x W x C的順序(其中H、W、C分別表示圖像的高、寬和通道數(shù),通道數(shù)一般為RGB三通道),另外,其中的每一個(gè)數(shù)據(jù)都是[0,255]的整數(shù),opencv中圖片的格式也是hwc。但在pytorch中為CHW,img = img.transpose(2, 0, 1)。

      在使用pytorch的時(shí)候,我們通常要使用pytorch中torchvision包下面的datasets模塊和transforms模塊。而通常情況下在我們使用了這兩個(gè)模塊之后,所處理的圖像數(shù)據(jù)格式已經(jīng)不是我們所熟知的格式了。下面按照代碼來進(jìn)行講解:
      #導(dǎo)入需要的包和模塊
      import torch
      from torchvision import datasets, transforms
      import os
      #transforms指明了需要對(duì)原始圖像做何種變換
      data_transforms = transforms.Compose([
      transforms.RandomResizedCrop(224),
      transforms.RandomHorizontalFlip(),
      transforms.ToTensor(),
      transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
      ])
      data_dir = 'original_data’
      image_dataset = datasets.ImageFolder(data_dir, data_transforms)
      dataloader = torch.utils.data.DataLoader(image_dataset, batch_size=32, shuffle=True, num_workers=0)

      代碼中首先使用datasets模塊讀取圖像數(shù)據(jù),輸出的圖像類型為PILImage,并且圖像中的每一個(gè)數(shù)據(jù)大小范圍已經(jīng)不再是[0,255],而是[0,1]。datasets模塊下有好幾個(gè)讀取圖像的類,比如CIFAR10、MNIST等能夠直接獲取標(biāo)準(zhǔn)數(shù)據(jù)庫(kù);而我們代碼中所使用的類是ImageFolder,它能夠讀取本地存放的圖像。其中需要指定圖像所在文件路徑和需要對(duì)數(shù)據(jù)進(jìn)行的變換。
      從上面的data_transforms變量中我們能夠看出進(jìn)行了多種變換,而Compose就是將多種變換組合起來的方法。data_transforms中一共包含了四個(gè)變換,前兩個(gè)是對(duì)PILImage進(jìn)行的,分別對(duì)其進(jìn)行隨機(jī)大?。J(rèn)原始圖像大小的0.08-1.0)和隨機(jī)寬高比(默認(rèn)原始圖像寬高比的3/4-4/3)的裁剪,之后resize到指定大小224;以及對(duì)原始圖像進(jìn)行隨機(jī)(默認(rèn)0.5概率)的水平翻轉(zhuǎn)。
      第三個(gè)transforms.ToTensor()的變換操作是關(guān)鍵一步,它將PILImage轉(zhuǎn)變?yōu)閠orch.FloatTensor的數(shù)據(jù)形式,這種數(shù)據(jù)形式一定是C x H x W的圖像格式加上[0,1]的大小范圍,它的作用有歸一化和將圖像轉(zhuǎn)化為tensor的作用
      后面的Normalize變換是對(duì)tensor這種數(shù)據(jù)格式進(jìn)行的,它的操作是用給定的均值和標(biāo)準(zhǔn)差分別對(duì)每個(gè)通道的數(shù)據(jù)進(jìn)行正則化,即減均值/方差。經(jīng)過上面一系列的轉(zhuǎn)換之后,我們可以得出的結(jié)論是,圖像的數(shù)據(jù)格式首先在維度的排序上發(fā)生了改變,其次數(shù)據(jù)的范圍也發(fā)生了改變。

      使用opecv讀取并處理圖像,使用matplotlib繪制圖像,最終保存為PIL.Image,再使用pytorch的torchvision.transforms.ToTensor()(img)轉(zhuǎn)化成tensor。
      具體操作如下:
      在這里插入圖片描述
      補(bǔ)充說明:

      1. opencv
        a. 讀取圖像:
        img = cv.imread(path)
        opencv庫(kù)使用imread讀取得到的默認(rèn)是一個(gè)BGR模式的彩色圖像,可以使用cv.cvtColor(img, cv.COLOR_BGR2RGB)將顏色模式轉(zhuǎn)化成RGB。opencv的基本圖像類型與numpy數(shù)組可以互相轉(zhuǎn)化。因此可以直接調(diào)用torch.from_numpy(img)將圖像轉(zhuǎn)成tensor。
        b. 保存圖像:
        cv.imwrite(path, img)
        c. 繪制圖像:
        cv.imshow(name, img)
        opencv的繪制圖像操作會(huì)將圖像以窗口的形式顯示在屏幕上,因此需要手動(dòng)執(zhí)行中斷命令來關(guān)閉窗口進(jìn)程。一般會(huì)用到:
        k = cv.waitKey(0) & 0xFF
        if k == 27:
        cv.destroyAllWindows()
        優(yōu)點(diǎn):對(duì)圖像處理的接口豐富,集成了許多常用的圖像處理操作:閾值、邊緣檢測(cè)、角點(diǎn)檢測(cè)、圖像濾波、形態(tài)學(xué)處理、傅里葉變換、直方圖均衡、模板匹配、運(yùn)動(dòng)檢測(cè)(meanshift),并且支持人臉部位識(shí)別。
        缺陷:opencv在讀取圖像時(shí),若path錯(cuò)誤,僅會(huì)返回None,而不會(huì)報(bào)錯(cuò),并且opencv不支持使用imread對(duì)gif格式的圖像進(jìn)行讀取,若要讀取gif格式的圖像,需要使用gif = cv.VideoCapture(path)得到一個(gè)opencv的視頻對(duì)象,然后使用ret,frame = gif.read()讀取該視頻對(duì)象的一幀。
      2. PIL
        PIL是python對(duì)圖像處理的基本庫(kù)
        a. 讀取圖像:
        img = PIL.Image.open(path)
        讀取得到的是一個(gè)PIL.xxxImageFile類型,numpy中提供了與將PIL.ImageFile轉(zhuǎn)化為array的接口:
        np.asarray(img) img->array
        Image.fromarray(array) array->img
        可以使用img.convert(model)轉(zhuǎn)換顏色模式。其中model包括:'1’:二值圖,'L’:灰度圖,'P’:8位彩色圖像,'RGB’:24位彩色圖像(每個(gè)通道8位),'RGBA’:相比RGB多了個(gè)alpha通道(不透明度)等等。
        b. 保存圖像:
        img.save(path)
        c. 繪制圖像:
        img.show()
        優(yōu)點(diǎn):支持的圖片格式豐富,并且作為python的基本庫(kù),與各個(gè)庫(kù)之間兼容性最好。
        缺點(diǎn):圖像處理算法較少。
      3. matplotlib
        matplotlib是python仿照matlab的繪圖來開發(fā)的圖像繪制庫(kù)。
        a. 讀取圖像:
        img = plt.imread()
        matplotlib讀取的圖像類型直接為numpy.array,并且matplotlib讀取圖像時(shí)直接進(jìn)行了歸一化操作。
        b. 保存圖像:
        plt.imsave(path,img)

        img.imsave(path)
        matplotlib在保存圖像時(shí),可以使用imsave保存不帶坐標(biāo)軸的圖像,也可以使用plt.savefig(path)保存帶坐標(biāo)軸的圖像。
        c. 繪制圖像:
        plt.imshow(img)
        plt.show()
        matplotlib在執(zhí)行imshow之后,必須跟著執(zhí)行show()。
        優(yōu)點(diǎn):和matlab的繪圖命令基本相同,不僅可以繪制圖像,也可以繪制其他類型的圖像(折線圖、散點(diǎn)圖、餅圖、熱力圖、3D圖),并且讀入的圖像與numpy直接兼容。
        缺點(diǎn):matplotlib是一個(gè)繪圖的庫(kù),因此沒有圖像處理相關(guān)的算法。
      來源:https://www./content-4-891851.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多