国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】

這篇具有很好參考價值的文章主要介紹了【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】

1、圖像屬性

OpenCV中讀取圖像文件后的數據結構符合Numpy的ndarray多維數組結構,因此 ndarray 數組的屬性和操作方法可用于圖像處理的一些操作。數據結構如下圖所示:

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

  • img.ndim:查看代表圖像的維度。彩色圖像的維數為3,灰度圖像的維度為2。
  • img.shape:查看圖像的形狀,代表矩陣的行數(高度)、列數(寬度)、通道數。
  • img.size:查看圖像數組元素總數,灰度圖像的數組元素總數為像素的數量,彩色圖像的數組元素總數為像素數量與通道數的乘積
# 打印圖像的參數
import cv2
imgFile = r"test.jpg" # 圖片和代碼 我放一個目錄下了
img1 = cv2.imread(imgFile) # 默認是 flags=1 三通道彩圖
img2 = cv2.imread(imgFile,0) # 讀取為灰度圖像
cv2.imwrite("testGray.jpg",img2) # 保存一下 留著看詳細信息
# cv2.imshow("test1",img1) #自己測試看一下
# cv2.imshow("test2",img2) #自己測試看一下
# cv2.waitKey(0)

# 打印輸出img1和img2的信息 圖像的維數(ndim), 形狀(shape), 元素總數(size), 元素類型(dtype)
print("ndim of img1(BGR): {}, img2(Gray): {}".format(img1.ndim, img2.ndim)) # 打印兩個圖像的 維度
print("shape of img1(BGR): {}, img2(Gray): {}".format(img1.shape, img2.shape)) # 打印兩個圖像的 形狀(高,寬,通道)
print("Size of img1(BGR): {}, img2(Gray): {}".format(img1.size, img2.size)) # 打印兩個圖像的 元素總數
print("dtype of img1(BGR): {}, img2(Gray): {}".format(img1.dtype, img2.dtype)) # 打印兩個圖像的 元素類型
# 上塊代碼的輸出結果
ndim of img1(BGR): 3, img2(Gray): 2
shape of img1(BGR): (676, 716, 3), img2(Gray): (676, 716)
Size of img1(BGR): 1452048, img2(Gray): 484016
dtype of img1(BGR): uint8, img2(Gray): uint8

在文件夾中右鍵圖片—>屬性—>詳細屬性中,查看兩個圖片信息,位深度除8(好像是因為8byte)為通道數。(3通道藍綠紅,單通道黑白)

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

2、像素編輯

像素是構成數字圖像的基本單位,像素處理是圖像處理的基本操作。

通過直接改變圖像數組矩陣的值來直接改變圖像。

# 像素編輯的一些操作
import cv2
img1 = cv2.imread("test.jpg") # 不用變量了 直接讀路徑  讀取默認彩圖
x, y = 500,500 # 根據橫縱左邊直接選取像素位置(x,y)
# 直接訪問數組元素,打印獲取像素值(BGR格式)
print("x={},y={}\n img[x,y] = {}".format(x,y,img1[x,y]))
# 遍歷 分別打印三個通道中 每個通道的數值
print(" img[{},{},ch]:".format(x,y),end="")
for i in range(3):
    print(img1[x,y,i] , end= " ")
# 遍歷 通過 img1.item()  分別打印三個通道中 每個通道的數值
print("\n img.item({},{},ch):".format(x,y),end="")
for i in range(3):
    print(img1.item(x,y,i),end=" ")
# 通過 img1.itemset() 修改像素通道中的數值 0通道的數值改成255
ch, newValue = 0, 255
print("\n orignal img[x,y] = {}".format(img1[x,y]))
img1.itemset((x,y,ch),newValue)
print(" updated img[x,y] = {}".for mat(img1[x,y]))
# 運行結果
x=500,y=500
 img[x,y] = [26 23 18]
 img[500,500,ch]:26 23 18 
 img.item(500,500,ch):26 23 18 
 orignal img[x,y] = [26 23 18]
 updated img[x,y] = [255  23  18]

3、圖像的創(chuàng)建與復制

創(chuàng)建

根據圖像數據結構符合Numpy的ndarray多維數組結構的特性,可以使用Numpy中 np.zeros() 等方法創(chuàng)建指定大小、類型的圖像對象,也可以使用 np.zeros_like() 等方法創(chuàng)建與已有圖像大小、類型相同的新圖像。

# 圖像創(chuàng)建的一些操作
import cv2
import numpy as np
# 通過寬高值創(chuàng)建
height, width, channels = 400, 300, 3 # 行/高度, 列/寬度, 通道數
imgEmpty = np.empty((height,width,channels),np.uint8) # 創(chuàng)建空數組
imgBlack = np.zeros((height,width,channels),np.uint8) # 創(chuàng)建黑色圖像 RGB=0
imgWhite = np.ones((height, width, channels), np.uint8) * 255  # 創(chuàng)建白色圖像 RGB=255
cv2.imshow("imgBlack",imgBlack) # 顯示出來看下
cv2.imshow("imgWhite",imgWhite) # 顯示出來看下
cv2.waitKey(0)
# 創(chuàng)建相同形狀的多維數組
img1 = cv2.imread("test.jpg") # 取彩色圖像(BGR)
imgBlackLike = np.zeros_like(img1)  # 創(chuàng)建與 img1 相同形狀大小的黑色圖像
imgWhiteLike = np.ones_like(img1) * 255  # 創(chuàng)建與 img1 相同形狀大小的白色圖像
cv2.imshow("imgBlackLike",imgBlackLike) # 顯示出來看下
cv2.imshow("imgWhiteLike",imgWhiteLike) # 顯示出來看下
cv2.waitKey(0)
# 創(chuàng)建彩色隨機圖像 RGB=random
import os # 導入庫 沒配環(huán)境的自己查一下
randomByteArray = bytearray(os.urandom(height * width * channels)) #在范圍: 0 <= x < 256里(bytearray函數),生成隨機字節(jié)串(os.urandom)
flatNumpyArray = np.array(randomByteArray) # 將隨機字符串 轉換成 Numpy中的 ndarray數據結構
imgRGBRand = flatNumpyArray.reshape(height, width, channels) # 將矩陣轉換為特定的行、列和通道的三維矩陣
cv2.imshow("imgRGBRand",imgRGBRand) # 顯示出來看下
cv2.waitKey(0)
# 創(chuàng)建灰度圖像 Gray=random
imgGrayWhite = np.ones((height,width),np.uint8) * 255 # 創(chuàng)建白色圖像
imgGrayBlack = np.zeros((height,width),np.uint8) # 創(chuàng)建黑色圖像
imgGrayEye = np.eye(width) # 創(chuàng)建對角線為 1的單位矩陣
randomByteArray = bytearray(os.urandom(height * width )) # 注意灰度通道為 1 不用 *channel
flatNumpyArray = np.array(randomByteArray)
imgGrayRand = flatNumpyArray.reshape(height,width) # 將矩陣轉換為特定的行、列二維矩陣
cv2.imshow("imgGrayRand",imgGrayRand) # 顯示出來看下
cv2.waitKey(0)

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv
【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

這里我只展示 隨機生成的彩圖和灰圖,樣例建議動手操作下。

復制

也是根據圖像數據結構特性,使用 Numpy 的 np.copy() 函數可以進行圖像的復制,注意:不能通過直接賦值進行圖像的復制。

# 圖像復制 直接賦值和copy的區(qū)別
import cv2
img1 = cv2.imread("test.jpg") # 讀取圖像
img2 = img1.copy() # 用 copy()函數賦值
print("用img2=img1.copy(),img2是img1嗎?",img1 is img2) # 打印確認img1和 img2是一個嗎
# 更改圖像的一塊作為標記
for col in range(100):
    for row in range(100):
        img2[col, row, :] = 0

img3 = cv2.imread("test.jpg")# 讀取圖像
img4 = img3 # 用 = 函數賦值
print("用img4=img3, img3是img4嗎?", img4 is img3) # 打印確認img3和 img4是一個嗎
# 更改圖像的一塊作為標記
for col in range(100):
    for row in range(100):
        img4[col,row,:] = 0
# 打印圖像看結果
cv2.imshow("Demo1",img1)
cv2.imshow("Demo2",img2)
cv2.imshow("Demo3",img3)
cv2.imshow("Demo4",img4)
cv2.waitKey(0)

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

根據圖片顯示結果發(fā)現(xiàn) img4=img3 直接賦值,改變 img4 的數值后 img3 的數值也被改變了;img2 = img1.copy(),改變 img2 的數值后 img1 并未發(fā)生改變。并且根據打印結果可以看到:

用img2=img1.copy(),img2是img1嗎? False
用img4=img3, img3是img4嗎? True

4、圖像的裁剪

可以用切邊直接對圖像進行裁剪,也可以用.copy()函數獲取拷貝副本。

# 圖像裁剪基礎操作
import cv2
img1 = cv2.imread("test.jpg")  # 讀取圖像
xmin, ymin, w, h = 180, 190, 400, 300  # 圖像左上點為(0,0) (xmin,ymin)為框的左上角 w為向右的寬度 h為向下的高度
imgCrop = img1[ymin:ymin+h, xmin:xmin+w].copy()  # 切片獲得裁剪后保留的圖像區(qū)域
cv2.imshow("imgCrop",imgCrop)
cv2.waitKey(0)

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

# cv2.selectROI() 可以通過鼠標選擇感興趣的矩形區(qū)域(ROI) 鼠標截圖
xmin, ymin, w, h = cv2.selectROI(img1,showCrosshair=True,fromCenter=False)  # 返回的是一個元組[min_x,min_y,w,h] showCrosshair是否在矩形框里畫十字線 fromCenter是否是從矩形框的中心開始畫
imgROI = img1[ymin:ymin+h, xmin:xmin+w].copy()
cv2.imshow("ROI",imgROI)
cv2.waitKey(0)

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

4、圖像的拼接

用 Numpy 的數組堆疊方法可以進行圖像的拼接:

np.hstack() 按水平方向(列順序)拼接 2個或多個圖像,np.vstack() 按**垂直方向(行順序)拼接 2個或多個圖像,圖像的寬度(數組的列)必須相同**。

# 圖像裁剪基礎操作
import cv2
import numpy as np
img1 = cv2.imread("test.jpg")  # 讀取圖像1
img2 = cv2.imread("testGray.jpg")  # 讀取圖像2
img1 = cv2.resize(img1,(400,400))  # 將圖像1改變尺寸為 400*400(w × h)
img2 = cv2.resize(img2,(300,400))  # 將圖像2改變尺寸為 300*400(w × h)
img3 = cv2.resize(img2,(400,300))  # 將圖像2改變尺寸為 300*400(w × h)
imgStackH = np.hstack((img1,img2))  # 圖像1和2 水平拼接
imgStackV = np.vstack((img1,img3))  # 圖像1和3 垂直拼接
# 打印輸出形狀屬性(高,寬,通道)
print("水平拼接:\n Shape of img1, img2 and imgStackH: ", img1.shape, img2.shape, imgStackH.shape)
print("垂直拼接:\n Shape of img1, img3 and imgStackV: ", img1.shape, img3.shape, imgStackV.shape)
cv2.imshow("DemoStackH", imgStackH)  # 在窗口顯示圖像 imgStackH
cv2.imshow("DemoStackV", imgStackV)  # 在窗口顯示圖像 imgStackV
cv2.waitKey(0)  # 等待按鍵命令

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv

輸出結果:

水平拼接:
 Shape of img1, img2 and imgStackH:  (400, 400, 3) (400, 300, 3) (400, 700, 3)
垂直拼接:
 Shape of img1, img3 and imgStackV:  (400, 400, 3) (300, 400, 3) (700, 400, 3)
OpenCV 也提供了2個或多個圖像水平拼接或垂直拼接的函數 cv.hconcat 與 cv.vconcat,具體操作如下:
# OpenCV 拼接 cv2.hconcat和 用法
import cv2
import numpy as np
img1 = cv2.imread("test.jpg")  # 讀取圖像1
img2 = cv2.imread("testGray.jpg")  # 讀取圖像2

# 水平拼接
imgH1 = cv2.resize(img1,(400,400))  # 將圖像1改變尺寸為 400*400 (w×h)
imgH2 = cv2.resize(img2,(300,400))  # 將圖像2改變尺寸為 300*400 (w×h)
imgH3 = imgH2.copy()
# imgStackH = np.hstack((imgH1, imgH2, imgH3))  # Numpy用法 高度相同圖像可以橫向水平拼接
imgStackH = cv2.hconcat((imgH1, imgH2, imgH3))  # OpenCV用法 高高度相同圖像可以橫向水平拼接
# 打印輸出形狀屬性(高,寬,通道)
print("水平拼接:\nShape of imgH1, imgH2 and imgStackH: ", imgH1.shape, imgH2.shape, imgStackH.shape)
cv2.imshow("DemoStackH", imgStackH)  # 在窗口顯示圖像 imgStackH
cv2.waitKey(0)

# # 垂直拼接
imgV1 = cv2.resize(img1,(400,400))  # 將圖像1改變尺寸為 400*400 (w×h)
imgV2 = cv2.resize(img2,(400,300))  # 將圖像2改變尺寸為 400*300 (w×h)
# imgStackV = np.vstack(((imgV1, imgV2))  # Numpy用法 高度相同圖像可以垂直拼接
# imgStackV = cv2.vconcat((imgV1, imgV2))  # 寬度相同圖像可以縱向垂直拼接
imgV = (imgV1,imgV2)  # 生成數組或元組
imgStackV = cv2.vconcat(imgV)
# 打印輸出形狀屬性(高,寬,通道)
print("垂直拼接:\n Shape of img1, img3 and imgStackV: ", imgV1.shape, imgV2.shape, imgStackV.shape)
cv2.imshow("DemoStackV", imgStackV)  # 在窗口顯示圖像 imgStackV
cv2.waitKey(0)  # 等待按鍵命令

【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv
【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】,計算機視覺,python,圖像處理,opencv文章來源地址http://www.zghlxwxcb.cn/news/detail-804278.html

聲明:本文是向博主「youcans_」OpenCV例程300篇學習的自用學習筆記 
原文鏈接:【youcans@qq.com, youcans的OpenCV例程300篇, https://blog.csdn.net/youcans/category_11459626.html】

到了這里,關于【計算機視覺—python 】 圖像處理入門教程 —— 圖像屬性、像素編輯、創(chuàng)建與復制、裁剪與拼接【 openCV 學習筆記 005 to 010 and 255】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 目標檢測 圖像處理 計算機視覺 工業(yè)視覺

    目標檢測 圖像處理 計算機視覺 工業(yè)視覺

    從事ai視覺算法有幾年了,本帖是對以往做過的計算機視覺項目的一些總結,硬件部署的大多是基于nvidia的開發(fā)板和GPU服務器上,如jetson nano,還有地平線J3J5和瑞芯微以及星辰的開發(fā)板,另外就是對實時性要求不高的部署在cpu上。有相關項目需求可以一起交流和學習。(+v 3

    2024年02月06日
    瀏覽(106)
  • 圖像處理與計算機視覺算法

    圖像處理與計算機視覺算法是實現(xiàn)對圖像和視頻內容分析、理解和操作的一系列技術。這些算法可以分為多個類別,包括但不限于以下幾個主要方面: 預處理 : 像素操作:灰度化、二值化、直方圖均衡化等,用于改善圖像的對比度和亮度分布。 去噪:高斯濾波、中值濾波、

    2024年02月22日
    瀏覽(21)
  • 計算機視覺(2)——圖像預處理

    計算機視覺(2)——圖像預處理

    二、圖像預處理 2.1 介紹? 2.2 特征提取方法 2.2.1 直方圖 2.2.2 CLAHE 2.2.3 形態(tài)學運算 2.2.4 空間域處理及其變換 2.2.5 空間域分析及變換? (1) 均值濾波 (2)中值濾波 (3)高斯濾波 (4)?梯度Prewitt濾波 (5)?梯度Sobel濾波 (6)?梯度Laplacian濾波 (7)?其他濾波? 2.2.6 頻域分

    2024年02月03日
    瀏覽(32)
  • 圖像處理/計算機視覺期刊投稿經驗

    我不配,以后有機會再說吧。 我也不配,以后有機會再說吧。 2022年投過,一個月之后被編輯immediate reject, 原因是“the scope not aligning well with the theme interest and/or desired genres of TSP”。在郵件的末尾,編輯表示manuscript的選題“well motivated”并且“interesting”,主要擔憂是所用到的

    2024年02月08日
    瀏覽(34)
  • 計算機視覺圖像處理常用方法匯總

    計算機視覺圖像處理常用方法匯總

    光線進入眼睛:當光線從一個物體反射或散射出來,進入人的眼睛時,它們通過角膜和晶狀體進入眼球內部。 聚焦光線:角膜和晶狀體將光線聚焦在視網膜上。晶狀體可以通過調整其形狀來調節(jié)聚焦距離,使物體的圖像清晰地映射在視網膜上。 光敏細胞感受光線:視網膜是

    2024年02月07日
    瀏覽(23)
  • 機器視覺、圖像處理和計算機視覺:概念和區(qū)別

    機器視覺、圖像處理和計算機視覺:概念和區(qū)別

    機器視覺、圖像處理和計算機視覺:概念和區(qū)別nbsp; 機器視覺、圖像處理和計算機視覺是相關但有區(qū)別的概念。 機器視覺主要應用于工業(yè)領域,涉及圖像感知、圖像處理、控制理論和軟硬件的結合,旨在實現(xiàn)高效的運動控制或實時操作。 圖像處理是指利用計算機對圖像進行

    2024年02月06日
    瀏覽(23)
  • 計算機視覺實驗:圖像處理綜合-路沿檢測

    計算機視覺實驗:圖像處理綜合-路沿檢測

    目錄 實驗步驟與過程 1. 路沿檢測方法設計 2. 路沿檢測方法實現(xiàn) 2.1 視頻圖像提取 2.2 圖像預處理 2.3?興趣區(qū)域提取 2.4?邊緣檢測 ???????2.5?Hough變換 ???????2.6?線條過濾與圖像輸出 3. 路沿檢測結果展示 4. 其他路沿檢測方法 實驗結論或體會 實驗內容: 針對

    2024年02月14日
    瀏覽(29)
  • 【計算機視覺】【圖像處理綜合應用】路沿檢測

    【計算機視覺】【圖像處理綜合應用】路沿檢測

    實驗內容: 針對給定的視頻,利用圖像處理基本方法實現(xiàn)道路路沿的檢測; 提示:可利用 Hough 變換進行線檢測,融合路沿的結構信息實現(xiàn)路沿邊界定位(圖中紅色的點位置)。 處理視頻文件 處理視頻文件的主要流程如下: 讀取視頻 → 逐幀提取 → 路沿檢測 → 逐幀保存

    2024年02月05日
    瀏覽(48)
  • 圖像處理與計算機視覺--第五章-圖像分割-Canny算子

    圖像處理與計算機視覺--第五章-圖像分割-Canny算子

    2.1.Canny算子簡單介紹 Canny算子是一種非常常用的邊緣檢測算子,其效果圖如下所示: 2.2.Canny算子邊緣檢測指標 Canny算子是基于邊緣檢測來實現(xiàn)的,那么邊緣檢測的指標如下所示: (1)好的信噪比,即將非邊緣點判定為邊緣點的概率要低。 (2)高定位,檢測出的邊緣要在實際邊緣中

    2024年02月07日
    瀏覽(25)
  • 利用C++進行圖像處理與計算機視覺

    在C++中進行圖像處理與計算機視覺是一個有趣且具有挑戰(zhàn)性的任務。C++是一種高效的編程語言,能夠提供足夠的靈活性和性能,以處理復雜的圖像處理和計算機視覺算法。在本文中,我們將介紹如何使用C++進行圖像處理和計算機視覺,以及一些常見的技術和庫。 圖像處理基礎

    2024年01月16日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包