OpenCV(python)——一鍵入門--第1篇

      網友投稿 1189 2025-03-31

      一:圖像讀取與展示

      import cv2 as cv src = cv.imread("d:/ma.jpg") #imread函數,讀入一張圖片,放在src底下 cv.namedWindow("input",cv.WINDOW_AUTOSIZE) #namedWindow 聲明一個窗口,可以在這里調整窗口大小 cv.imshow("intput",src) #imshow函數,展示src底下的照片 cv.waitKey(0) cv.destroyAllWindows()

      cv.imread()

      cv,imread() 是一個圖像讀取函數,里面主要輸入一個字符串,內容是圖像所在的絕對路徑或者相對路徑。我們需要把完整的路徑用雙引號保存下來。(請注意,需要提前在路徑放好該照片)

      補充:cv.imread() 除了直接讀取照片,還可以傳入第二個參數,比如可以直接設置cv.imread("圖像路徑",cv.IMREAD_GRAYSCALE),將圖像直接讀取成灰度圖。相關參考資料如下圖:

      cv.namedWindow()

      cv.nameWindow()是一個窗口聲明函數。第一個參數是該窗口的標題,第二個參數是窗口的模式。最常用的參數是WINDOW_AUTOSIZE。

      其他參數簡介如下,感興趣的話可以參考,或者可以直接看下一個函數的介紹:

      WINDOW_NORMAL 或 WINDOW_AUTOSIZE:?WINDOW_NORMAL 可以調整窗口大小,而 WINDOW_AUTOSIZE 會自動調整窗口大小以適合顯示的圖像,并且無法手動更改窗口大小。

      WINDOW_FREERATIO 或 WINDOW_KEEPRATIO:?WINDOW_FREERATIO 調整圖像而不考慮其比例,而 WINDOW_KEEPRATIO 保持圖像比例。

      WINDOW_GUI_NORMAL 或 WINDOW_GUI_EXPANDED:?WINDOW_GUI_NORMAL 是在沒有狀態欄和工具欄的情況下繪制窗口的舊方法,而 WINDOW_GUI_EXPANDED 是一種新的增強型 GUI。默認情況下,標志 == WINDOW_AUTOSIZE |?WINDOW_KEEPRATIO |?WINDOW_GUI_EXPANDED

      cv.imshow()

      cv.imshow() 是圖像展示函數,我們看代碼第5行第一個參數,是圖片展示對應的窗口名稱。如果該參數和namedWindow設置的窗口大小一致,則會將圖片放在該窗口下。如果是一個全新的標題名,OpenCV會參考該參數創建一個對應的新窗口,并展示該圖像。

      補充:如果窗口是使用WINDOW_AUTOSIZE標志創建的,則圖像以其原始大小顯示,但仍受屏幕分辨率的限制。否則,它會將縮放圖像以適合窗口。該函數可以縮放圖像,具體取決于其深度:

      如果圖像是 8 位無符號,則按原樣顯示。

      如果圖像是 16 位無符號或 32 位整數,則將像素除以 256。即值范圍 [0,255*256] 映射到 [0,255]。

      如果圖像是 32 位或 64 位浮點,則像素值乘以 255。即值范圍 [0,1] 映射到 [0,255]。

      關于展示圖像相關的補充:

      如果窗口是使用 OpenGL 支持創建的,則cv::imshow還支持ogl::Buffer、ogl::Texture2D和cuda::GpuMat作為輸入。

      如果在此函數之前沒有創建窗口,則假定使用cv::WINDOW_AUTOSIZE創建一個窗口。

      如果需要顯示大于屏幕分辨率的圖像,則需要在 imshow 之前調用 namedWindow("", WINDOW_NORMAL)。

      cv.waitKey()

      cv.waitKey()是一個鍵盤綁定函數,時間量度是毫秒ms。函數會等待(n)里面的n毫秒,看是否有鍵盤輸入。當有鍵盤輸入時,則會返回按鍵的ASCII值。沒有鍵盤輸入,則返回-1。一般我們設置為0,他會無限等待鍵盤的輸入。

      cv.destroyAllWindows()

      cv.destroyAllWindows()是用來刪除窗口的,()里不指定任何參數,則刪除所有窗口。刪除特定的窗口,則需要調用destroyWindow(),往()輸入特定的窗口值。主要用于釋放變量占用的內存

      你可以調用destroyWindow()或? destroyAllWindows()來關閉窗口并取消分配任何相關的內存使用。對于一個簡單的程序來說,實際上不必調用這些函數,因為退出時操作系統會自動關閉應用程序的所有資源和窗口。如果任何相關內存使用沒有被取消分配,則調用destroyAllWindows()會處理掉分配。如果是簡單的使用或確保資源的適當使用,就不需要調用該函數。

      二:圖像色域轉換

      a = cv.cvtColor(src , cv.COLOR_BGR2HSV) #轉換色域,xxx2xxx #包括以下色域:YCrCb,HSV,HLS,Lab,Luv,Bayer,XYZ,GRAY cv.imshow("output",a)

      提醒:當然,import 語句以及cv.waitKey(),cv.destroyAllWindows()都是很重要的語句,在往后部分僅強調核心的部分代碼,運行時候記得在首尾加上。

      cv.cvtColor()

      該函數將輸入圖像從一種顏色空間轉換為另一種顏色空間。 ?我們主要使用的色域空間如下:YCrCb , HSV , HLS , Lab , Luv , Bayer , XYZ , GRAY

      R、G 和 B 通道值的常規范圍是:

      CV_8U 圖像為 0 到 255

      CV_16U 圖像的 0 到 65535

      CV_32F 圖像為 0 到 1

      如下圖所示,output是原圖,g-output則是圖像處于hsv色域時的圖

      重點:opencv中的圖像通道默認不是RGB,而是BGR,也就是

      通道0對應藍色,通道1對應綠色,通道2對應紅色

      三:圖像的修改

      import cv2 as cv import numpy as np m1 = src cv.imshow("m1",m1) #原圖 m2 = np.copy(src) #圖像拷貝 m2[100:300,300:500,2]=255 #修改像素坐標底下的通道值 cv.imshow("m2",m2) m3 = np.zeros(src.shape, src.dtype) #使用numpy創建一個空圖像 cv.imshow("m3", m3) m4 = np.zeros([512,215,3], np.uint16)#高 寬 通道數ch,這里是設置圖像大小 m4[:,:,1] =127 #給綠色通道賦值 127 cv.imshow("m4", m4) cv.waitKey(0) cv.destroyAllWindows()

      numpy

      NumPy是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。我們用簡寫np來描述numpy函數。

      np.copy

      拷貝矩陣。我們的圖像可以看成是一個二維矩陣,可以直接用numpy的copy函數拷貝圖像,括號內是要拷貝的圖像,然后用 “=” 號賦值給新的變量。

      np.zeros

      numpy.zeros(shape, dtype = float, order = 'C')

      創建指定大小的數組,數組元素以 0 來填充

      參數介紹:shape:數組形狀。需要傳入圖像的寬和高。也可以用 image.shape傳入數據。

      OpenCV(python)——一鍵入門--第1篇

      dtype:數據類型。可以參考如下表格:

      order:‘C’用于C的行數組。或者用‘F’用于FORTRAN的列數組

      在代碼中,m2[100:300,300:500,2]=255,是將像素點從左上角開始數,坐標區間【100->300】,【300->500】的像素進行賦值。坐標和值都可以自己設置

      四:像素之間的加減法

      src = cv.imread("D:/p1.jpg") src2 = cv.imread("D:/p2.jpg") #加法 add_result = np.zeros(src2.shape, src2.dtype) cv.add(src,src2,add_result) cv.imshow("add-result",add_result) #減法 sub_result = np.zeros(src2.shape, src2.dtype) cv.subtract(src,src2,sub_result) cv.imshow("sub_result",sub_result) #乘法 mul_result = np.zeros(src2.shape, src2.dtype) cv.multiply(src,src2,mul_result) cv.imshow("mul_result",mul_result) #除法 div_result = np.zeros(src2.shape,src2.dtype) cv.divide(src,src2,div_result) cv.imshow("div_result",div_result)

      cv.add()? 加法? ;cv.subtract()? 減法? ;cv.multiply()? 乘法? ;cv.divide()? 除法

      這些像素級的圖像計算函數共通的,前兩個參數為需要參與計算的兩張圖像,最后一個參數是輸出的圖像。通常我們會用 np.zeros 函數創建一個新的空圖像。然后再放進函數中去

      五:像素邏輯運算

      #邏輯運算 dst1 = cv.bitwise_and(src, src2)#與運算 dst2 = cv.bitwise_xor(src, src2)#異或運算 dst3 = cv.bitwise_or(src, src2) #或運算 cv.imshow("dst1", dst1) cv.imshow("dst2", dst2) cv.imshow("dst3", dst3)

      cv.bitwise主要有四種邏輯運算函數? ?cv.bitwise_and(按位與)? cv.bitwise_not(非運算)? cv.bitwise_xor(異或運算)? cv.bitwise_or(或運算)

      這些像素級的圖像計算函數共通的,兩個參數為參與運算的兩個圖像變量。然后用 “=” 號承接圖像即可。

      AI OpenCV Python 機器視覺

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:word轉換為pdf時出現引用源錯誤怎么辦(word導出為pdf出現錯誤)
      下一篇:如何修改標題樣式?(wps如何修改標題樣式)
      相關文章
      亚洲a一级免费视频| 情人伊人久久综合亚洲| 无码欧精品亚洲日韩一区| 亚洲男人在线无码视频| www国产亚洲精品久久久| 亚洲av无码专区青青草原| 亚洲影院天堂中文av色| 亚洲字幕AV一区二区三区四区| 亚洲人成在线免费观看| 亚洲嫩草影院在线观看| 亚洲人成电影青青在线播放| 亚洲美女aⅴ久久久91| 亚洲美女在线观看播放| 亚洲麻豆精品果冻传媒| 亚洲人成电影在线观看青青| 亚洲av无码片在线观看| 一本色道久久88—综合亚洲精品| 狠狠色伊人亚洲综合网站色| 亚洲中文字幕乱码一区| 亚洲另类无码一区二区三区| 久久综合亚洲色hezyo| 国产午夜亚洲精品不卡| 亚洲视频一区二区| 亚洲一区二区三区无码中文字幕| 亚洲日韩av无码| 亚洲高清视频在线观看| 亚洲精品国产啊女成拍色拍| 亚洲国产亚洲综合在线尤物| 亚洲无mate20pro麻豆| 亚洲日韩精品无码AV海量| 日韩色日韩视频亚洲网站| 亚洲精品无码成人片久久| 亚洲av日韩av高潮潮喷无码| 久久久久亚洲精品美女| 亚洲综合久久成人69| 亚洲妇女熟BBW| 久久久久亚洲国产AV麻豆| 亚洲综合另类小说色区色噜噜| 亚洲色婷婷一区二区三区| 亚洲国产美国国产综合一区二区| 亚洲沟沟美女亚洲沟沟|