日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CV之路——opencv基本操作

發(fā)布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CV之路——opencv基本操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目的

  • 分享學(xué)習(xí)心得,從實操中學(xué)習(xí)圖像的前處理。代碼直接跑,什么都不用改,如果網(wǎng)址失效,直接換網(wǎng)址即可。

- imageio==2.6.0 用來讀取網(wǎng)址圖片 - cv2==3.2.14 圖像操作 - numpy==1.19.0
  • 獲取圖片
import imageio # 可以從網(wǎng)址中讀取圖片的庫 --> pip install imageio import cv2 file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg" img = imageio.imread(file_path) img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) # 讀取的是RGB通道,轉(zhuǎn)成opencv的BGR通過 cv2.imwrite("cat.jpg",img ) cv2.imshow("cat", img) cv2.waitKey(0) cv2.destroyAllWindows()

  • 圖片分通道
# 圖片分通道 -->B,G,R import imageio import cv2 file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg" img = imageio.imread(file_path) img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) # 讀取的是RGB通道,轉(zhuǎn)成opencv的BGR通道 img = cv2.resize(img,(360,640)) # 更改大小,便于顯示 b,g,r = cv2.split(img) # 圖片分通道 # img_1 = cv2.merge((b, g, r)) # 分割后的通道合并 bgr = np.hstack((b,g,r)) # 圖片矩陣并排顯示 cv2.imwrite("split.jpg",bgr ) cv2.imshow("split",bgr) cv2.waitKey(0) cv2.destroyAllWindows()

  • 形態(tài)學(xué)——腐蝕膨脹
import imageio import cv2 file_path = "http://1824.img.pp.sohu.com.cn/images/blog/2009/7/21/21/16/1234ab28e28g214.jpg" img = imageio.imread(file_path) img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) kernel = (7,7) # 腐蝕或膨脹的程度 erode = cv2.erode(img, kernel, iterations=20) # 腐蝕操作 dilate = cv2.dilate(img, kernel, iterations=20) # 膨脹操作 result = np.hstack((img,erode,dilate)) # 原圖 - 腐蝕 - 膨脹 cv2.imwrite("erode_dilate.jpg",result) cv2.imshow("result",result) cv2.waitKey(0) cv2.destroyAllWindows()

  • 形態(tài)學(xué)——開運算,閉運算
import numpy as np import imageio import cv2 file_path = "https://img.pconline.com.cn/images/photoblog/9/7/3/6/9736422/20099/21/1253523872358_mthumb.jpg" img = imageio.imread(file_path) img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) img = cv2.resize(img,(360,360)) kernel = (7,7) # 腐蝕或膨脹的程度 opens = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=20) # 開運算 -->先腐蝕再膨脹 close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=20) # 閉運算 -->先膨脹再腐蝕 result = np.hstack((img,opens,close)) # 原圖 - 開運算 - 閉運算 cv2.imwrite("open_close.jpg",result) cv2.imshow("result",result) cv2.waitKey(0) cv2.destroyAllWindows()

  • 邊緣檢測——sobel
import numpy as np import imageio import cv2 file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg" img = imageio.imread(file_path) img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) img = cv2.resize(img,(360,640)) sobelx = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=3) # 延x方向檢測 sobely = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=0, dy=1, ksize=3) # 延y方向檢測 # sobelxy = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=1, dy=1, ksize=3) # 也可以直接x-y一起sobel,但一般效果沒有分開處理的好 convx = cv2.convertScaleAbs(sobelx) # convy = cv2.convertScaleAbs(sobely) sobel = cv2.addWeighted(convx, 0.5, convy, 0.5, 0) res = np.hstack((img, convx, convy, sobel)) # 原圖 - sobelx - sobely - sobel cv2.imwrite("sobel.jpg",res) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows()

  • 邊緣檢測——canny
import numpy as np import imageio import cv2 file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg" img = imageio.imread(file_path) img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) img = cv2.resize(img,(360,640)) print(img.shape) # thresh1和thresh2可以根據(jù)實際圖片情況更改 thresh1 = 0 thresh2 = 125 canny = cv2.Canny(img, thresh1, thresh2) print(canny.shape) result = np.hstack((img,canny)) cv2.imwrite("canny.jpg",result) cv2.imshow('res', result) cv2.waitKey(0) cv2.destroyAllWindows()

  • 圖像金字塔
# 上采樣 import numpy as np import imageio import cv2 file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg" original = imageio.imread(file_path) img = cv2.cvtColor(original,cv2.COLOR_RGB2BGR) # 下采樣 down1 = cv2.pyrDown(img,(int(img.shape[0]/2),int(img.shape[1]/2))) down2 = cv2.pyrDown(down1,(int(img.shape[0]/4),int(img.shape[1]/4))) # # 上采樣 # up1 = cv2.pyrUp(img,(int(img.shape[0]/2),int(img.shape[1]/2))) # up2 = cv2.pyrUp(up1 ,(int(img.shape[0]/4),int(img.shape[1]/4))) cv2.imwrite("original.jpg",img) cv2.imwrite("down1.jpg",down1) cv2.imwrite("down2.jpg",down2) cv2.imshow('original',img) cv2.imshow('down1',down1) cv2.imshow('down2',down2) cv2.waitKey(0) cv2.destroyAllWindows()

  • 總結(jié)
    • 每天進步一點點
  • 參考文獻
    https://max.book118.com/html/2018/0523/168182943.shtm
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的CV之路——opencv基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。