最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python OpenCV學(xué)習(xí)筆記

 更新時(shí)間:2021年03月31日 14:47:40   作者:LightningMaster  
這篇文章主要介紹了python OpenCV的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用python的opencv,感興趣的朋友可以了解下

圖像翻轉(zhuǎn)

使用Python的一個(gè)包,imutils。使用下面的指令可以安裝。

pip install imutils

imutils包的Github地址:https://github.com/jrosebr1/imutils

CSDN鏡像:https://codechina.csdn.net/mirrors/jrosebr1/imutils

可以在上面這個(gè)地址里面學(xué)習(xí)更多的使用方式。

import cv2
import imutils

'''
imutils.rotate
第一個(gè)參數(shù)是翻轉(zhuǎn)的圖像,第二個(gè)參數(shù)的翻轉(zhuǎn)角度
函數(shù)還提供翻轉(zhuǎn)中心的設(shè)置,但默認(rèn)就是中心翻轉(zhuǎn)。
'''
vc = cv2.VideoCapture(0)

if vc.isOpened():
  flag, frame = vc.read()
  img = imutils.rotate(frame, 180)  # 圖像翻轉(zhuǎn) 
  cv2.imshow("frame", img)
else:
  flag = False

while flag:
  flag, frame = vc.read()
  if frame is None:
    break
  if flag is True:
    img = imutils.rotate(frame, 180)  # 圖像翻轉(zhuǎn)
    cv2.imshow("frame", img)
    if cv2.waitKey(10) == 27:
      break
vc.release()
cv2.destroyAllWindows()

這樣寫的話,最后的輸出圖像就是翻轉(zhuǎn)180度的。

imutils包里還有其他好用的函數(shù),resizing、4-point Perspective Transform、Sorting Contours等等。

圖像輪廓排序

這個(gè)效果同樣也是依靠imutils包完成。

from imutils import contours
import cv2
'''
contours.sort_contours
可選排序方式:"left-to-right", "right-to-left", "top-to-bottom", "bottom-to-top"
返回值為輪廓和外接矩形

contours.label_contour
contours包內(nèi)自帶的畫輪廓的函數(shù),可以直接用,然后可以在圖片上標(biāo)出輪廓序號(hào)
也可以直接使用cv2.drawContours直接畫輪廓
'''
img = cv2.imread(r"D:\opencv-workspace\Opencv\test17--VScode\shapes.png")
draw_img = img.copy()
img_rect = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.Canny(gray, 10, 20)  # Canny邊緣檢測(cè)
cnts, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 獲得輪廓
(cnts, boundingBoxes) = contours.sort_contours(cnts, "top-to-bottom")  # 對(duì)輪廓進(jìn)行排序處理
for (i, c) in enumerate(cnts):
  sortedImage = contours.label_contour(draw_img, c, i, color=(240, 0, 159))
# img_out = cv2.drawContours(draw_img, cnts, -1, (240, 0, 159), 2)
# 根據(jù)boundingBoxes畫外接矩形
for (x, y, w, h) in boundingBoxes:
  img_rect = cv2.rectangle(img_rect, (x, y), (x+w, y+h), (240, 0, 159), 2)
cv2.imshow("top-to-bottom", sortedImage)
cv2.imshow("rect", img_rect)
cv2.waitKey(0)
cv2.destroyAllWindows()

這樣寫的話,最后的輸出圖像就是翻轉(zhuǎn)180度的。

imutils包里還有其他好用的函數(shù),resizing、4-point Perspective Transform、Sorting Contours等等。

圖像輪廓排序

這個(gè)效果同樣也是依靠imutils包完成。

from imutils import contours
import cv2
'''
contours.sort_contours
可選排序方式:"left-to-right", "right-to-left", "top-to-bottom", "bottom-to-top"
返回值為輪廓和外接矩形

contours.label_contour
contours包內(nèi)自帶的畫輪廓的函數(shù),可以直接用,然后可以在圖片上標(biāo)出輪廓序號(hào)
也可以直接使用cv2.drawContours直接畫輪廓
'''
img = cv2.imread(r"D:\opencv-workspace\Opencv\test17--VScode\shapes.png")
draw_img = img.copy()
img_rect = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.Canny(gray, 10, 20)  # Canny邊緣檢測(cè)
cnts, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 獲得輪廓
(cnts, boundingBoxes) = contours.sort_contours(cnts, "top-to-bottom")  # 對(duì)輪廓進(jìn)行排序處理
for (i, c) in enumerate(cnts):
  sortedImage = contours.label_contour(draw_img, c, i, color=(240, 0, 159))
# img_out = cv2.drawContours(draw_img, cnts, -1, (240, 0, 159), 2)
# 根據(jù)boundingBoxes畫外接矩形
for (x, y, w, h) in boundingBoxes:
  img_rect = cv2.rectangle(img_rect, (x, y), (x+w, y+h), (240, 0, 159), 2)
cv2.imshow("top-to-bottom", sortedImage)
cv2.imshow("rect", img_rect)
cv2.waitKey(0)
cv2.destroyAllWindows()

顏色識(shí)別

基礎(chǔ)顏色識(shí)別

顏色識(shí)別是在HSV空間內(nèi)進(jìn)行的,因此在使用之前先進(jìn)行顏色空間的轉(zhuǎn)換。

'''使用下面這個(gè)函數(shù)進(jìn)行轉(zhuǎn)換,第一個(gè)參數(shù)填寫要轉(zhuǎn)換的圖片,第二個(gè)參數(shù)填寫cv2.COLOR_BGR2HSV'''
cv2.cvtColor
import cv2
import numpy as np
'''
cv2.inRange
函數(shù)很簡(jiǎn)單,參數(shù)有三個(gè)
第一個(gè)參數(shù):hsv指的是原圖
第二個(gè)參數(shù):lower_red指的是圖像中低于這個(gè)lower_red的值,圖像值變?yōu)?
第三個(gè)參數(shù):upper_red指的是圖像中高于這個(gè)upper_red的值,圖像值變?yōu)?
而在lower_red~upper_red之間的值變成255
'''
# 閾值
lower_green = np.array([50, 255, 255])
upper_green = np.array([70, 255, 255])
img = cv2.imread(r"D:\opencv-workspace\Opencv\test16--VScode\photo.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask_green = cv2.inRange(img_hsv, lower_green, upper_green)
cv2.imshow("img_or", mask_green)
# 使用下面這個(gè)函數(shù)能顯示原來的顏色。
res_green = cv2.bitwise_and(img, img, mask=mask_green)
cv2.imshow("img", res_green)
cv2.waitKey(0)
cv2.destroyAllWindows()

在進(jìn)行顏色識(shí)別時(shí),難免會(huì)出現(xiàn)“漏顏色”的現(xiàn)象,也就是會(huì)出現(xiàn)沒識(shí)別全的現(xiàn)象。這個(gè)時(shí)候可以再對(duì)圖像進(jìn)行處理,比如說進(jìn)行形態(tài)學(xué)處理,讓圖像更加飽滿之類的。

根據(jù)BGR獲取HSV

import cv2

color = np.uint8([[[193, 189, 147]]])  # 參數(shù)填寫B(tài)GR的值
hsv = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)
print(hsv)  # 打印出來的數(shù)值就是對(duì)應(yīng)的HSV值

程序運(yùn)行的結(jié)果是

[[[ 93 61 193]]]

這個(gè)就是對(duì)應(yīng)的HSV的值。

根據(jù)之前寫的顏色識(shí)別,就需要把對(duì)應(yīng)的閾值寫出。具體寫法就是保持S和V不變,H加減10。這樣的話就可以寫出高低閾值然后應(yīng)用到顏色識(shí)別里面就可以了。

閾值編輯器

import cv2
import numpy as np


def function(x):
  lowH = cv2.getTrackbarPos("lowH", "img_666")
  lowS = cv2.getTrackbarPos("lowS", "img_666")
  lowV = cv2.getTrackbarPos("lowV", "img_666")
  HighH = cv2.getTrackbarPos("HighH", "img_666")
  HighS = cv2.getTrackbarPos("HighS", "img_666")
  HighV = cv2.getTrackbarPos("HighV", "img_666")
  # print(lowH, lowS, lowV, HighH, HighS, HighV)
  lower = np.uint8([lowH, lowS, lowV])
  upper = np.uint8([HighH, HighS, HighV])
  mask = cv2.inRange(img_hsv, lower, upper)
  res = cv2.bitwise_and(img, img, mask=mask)
  cv2.imshow("img", res)


img = cv2.imread(r"D:\opencv-workspace\Opencv\test16--VScode\test.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.namedWindow("img_666")
cv2.createTrackbar("lowH", "img_666", 0, 179, function)
cv2.createTrackbar("lowS", "img_666", 0, 255, function)
cv2.createTrackbar("lowV", "img_666", 0, 255, function)
cv2.createTrackbar("HighH", "img_666", 0, 179, function)
cv2.createTrackbar("HighS", "img_666", 0, 255, function)
cv2.createTrackbar("HighV", "img_666", 0, 255, function)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

寫了一個(gè)比較垃圾的閾值編輯器。。。就不多解釋了。。

以上就是python OpenCV學(xué)習(xí)筆記的詳細(xì)內(nèi)容,更多關(guān)于python OpenCV的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入分析在Python模塊頂層運(yùn)行的代碼引起的一個(gè)Bug

    深入分析在Python模塊頂層運(yùn)行的代碼引起的一個(gè)Bug

    幾個(gè)星期前, 我的同事跑過來, 說發(fā)現(xiàn)一個(gè)奇怪的Bug: 在使用Python的subprocess運(yùn)行子進(jìn)程時(shí), 當(dāng)子進(jìn)程運(yùn)行失敗時(shí)居然沒有拋出錯(cuò)誤!
    2014-07-07
  • django搭建項(xiàng)目配置環(huán)境和創(chuàng)建表過程詳解

    django搭建項(xiàng)目配置環(huán)境和創(chuàng)建表過程詳解

    這篇文章主要介紹了django搭建項(xiàng)目配置環(huán)境和創(chuàng)建表過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • numpy中tensordot的用法

    numpy中tensordot的用法

    本文主要介紹了numpy中tensordot的用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Appium中scroll和drag_and_drop根據(jù)元素位置滑動(dòng)

    Appium中scroll和drag_and_drop根據(jù)元素位置滑動(dòng)

    本文主要介紹了Appium中scroll和drag_and_drop根據(jù)元素位置滑動(dòng),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • python實(shí)現(xiàn)圖片處理和特征提取詳解

    python實(shí)現(xiàn)圖片處理和特征提取詳解

    這篇文章主要介紹了python實(shí)現(xiàn)圖片處理和特征提取詳解,文中向大家分享了Python導(dǎo)入圖片,將圖像轉(zhuǎn)化為二維矩陣,模糊化圖片等Python對(duì)圖像的操作,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Numpy中arange()的用法及說明

    Numpy中arange()的用法及說明

    Numpy的arange()函數(shù)用于在指定間隔內(nèi)生成均勻間隔的數(shù)組,它接受開始值、停止值和步長(zhǎng)來創(chuàng)建數(shù)組,返回的是ndarray類型,如果沒有提供dtype,則會(huì)根據(jù)其他參數(shù)推斷數(shù)據(jù)類型,對(duì)于浮點(diǎn)類型參數(shù),結(jié)果數(shù)組的長(zhǎng)度計(jì)算方式為ceil((stop-start)/step)
    2024-10-10
  • Python數(shù)據(jù)可視化圖實(shí)現(xiàn)過程詳解

    Python數(shù)據(jù)可視化圖實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Python數(shù)據(jù)可視化圖實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • NumPy之矩陣向量線性代數(shù)等操作示例

    NumPy之矩陣向量線性代數(shù)等操作示例

    這篇文章主要為大家介紹了NumPy之矩陣向量線性代數(shù)等操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python實(shí)現(xiàn)的金山快盤的簽到程序

    Python實(shí)現(xiàn)的金山快盤的簽到程序

    正在學(xué)習(xí)python而且自己一直在用金山快盤,所以就寫來個(gè)簽到的功能,每天定時(shí)跑
    2013-01-01
  • 詳解Python中內(nèi)置的NotImplemented類型的用法

    詳解Python中內(nèi)置的NotImplemented類型的用法

    這篇文章主要介紹了詳解Python中內(nèi)置的NotImplemented類型的用法,包括對(duì)相關(guān)的__eq__()和__ne__()兩個(gè)方法使用的講解,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

永新县| 澜沧| 廉江市| 景宁| 洛川县| 奉贤区| 老河口市| 镇赉县| 汕尾市| 施秉县| 平武县| 理塘县| 固始县| 延津县| 饶河县| 新民市| 鄂伦春自治旗| 沙坪坝区| 巴东县| 常山县| 霸州市| 喀喇沁旗| 芷江| 琼结县| 汉川市| 扎鲁特旗| 永修县| 榆树市| 吴忠市| 来宾市| 长宁区| 巍山| 惠东县| 宝山区| 渝北区| 绥化市| 呼图壁县| 福鼎市| 加查县| 平乡县| 濉溪县|