OpenCV-opencv下載安裝和基本操作

文章目錄

  • 一、實驗目的
  • 二、實驗內容
  • 三、實驗過程
    • OpenCV-python的安裝與配置
      • python下載和環境配置
      • PIP鏡像
      • 安裝Numpy
      • 安裝openCV-python
      • 檢驗opencv安裝是否成功
    • openCV-python的基本操作
      • 圖像輸入和展示以及寫出
      • openCV界面編程
      • 單窗口顯示多圖片
      • 鼠標事件
      • 鍵盤事件
      • 滑動條事件
  • 四、實驗結果
  • 五、實驗總結

一、實驗目的

本實驗目的是學習如何使用opencv庫來讀取文件并顯示圖象,學習opencv中的基本事件——窗口事件,鼠標事件、鍵盤事件以及滑動條事件,同時熟悉OpenCV庫的函數和方法,為進一步學習和應用計算機視覺和圖像處理提供基礎。

二、實驗內容

1、opencv的安裝

2、opencv的基本操作 - 圖像輸入輸出模塊:通過cv2.imread()函數讀取圖像文件,并使用cv2.imshow()函數顯示圖像。使用cv2.waitKey()等待按鍵響應,然后使用cv2.destroyAllWindows()關閉窗口。使用shape屬性獲取圖像的形狀(高度、寬度)。使用cv2.imwrite()函數將圖像保存到指定的文件中。 - opencv界面編程:界面編程主要由High-level GUI模塊支持。 - 單窗口顯示多圖片:使用hstack函數實現單窗口顯示多幅圖像。 - 銷毀窗口:使用destroyWindow和destroyAllWindows來銷毀窗口,前者為銷毀某一個制定名稱的窗口,后者為銷毀所有的窗口。 - 鼠標事件:我們使用鼠標事件來實現與用戶的交互操作,有鼠標點擊事件、鼠標移動事件、鼠標釋放事件等。 - 鍵盤事件:鍵盤事件由waitKey函數實現。 - 滑動條事件:使用cv2.createTrackbar()函數創建一個滑動條,并指定滑動條的名稱、所屬窗口、數值范圍和初始值等參數。定義一個滑動條事件的回調函數,并將其與窗口綁定。在滑動條事件回調函數中,根據滑動條的數值變化對圖像進行實時更新和顯示。

三、實驗過程

OpenCV-python的安裝與配置

python下載和環境配置

1.前往python官網進行對應版本的下載

在這里插入圖片描述

2.下載完成打開程序進行配置,點擊Install Now 也可以進行安裝目錄的更改

在這里插入圖片描述

3.檢測安裝成果,打開命令行窗口,輸入pyhthon

如果顯示如下圖就安裝配置成功

在這里插入圖片描述

PIP鏡像

再命令行窗口分別運行以下兩行代碼,如下圖

第一行是更新pip

第二行是把pip對應的國外網站改為鏡像國內的,提高下載速度 python -m pip install --upgrade pip pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

在這里插入圖片描述

安裝Numpy

打開命令行輸入 pip install numpy

來下載Numpy包,如圖(不更改pip鏡像會很慢)
在這里插入圖片描述

安裝openCV-python

命令行運行 pip install opencv-python

如圖
在這里插入圖片描述

再安裝一下openCV的擴展包,后面接版本號,和我們安裝openCV版本一致即可 pip install opencv-contrib-python4.8.0.76

再安裝一個可視化庫 pip install matplotlib

在這里插入圖片描述

檢驗opencv安裝是否成功

命令行先輸入python

然后導入一下包 import cv2

再檢查一下版本 cv2.version

如果能正常顯示版本就是安裝成功,然后exit()退出即可

openCV-python的基本操作

圖像輸入和展示以及寫出

    # 讀取圖像文件src_image = cv2.imread('bird.jpg', cv2.IMREAD_COLOR)gray_image = cv2.imread('bird.jpg', cv2.IMREAD_GRAYSCALE)cv2.imshow("src_image", src_image)print(src_image.shape)cv2.waitKey(0)# 寫入圖像文件cv2.imwrite('gray_image.jpg', gray_image)

效果展示

圖像寫入和展示

在這里插入圖片描述

灰度圖像的寫入

在這里插入圖片描述

openCV界面編程

    OpenCV界面編程 img = cv2.imread('image.jpg') cv2.imshow("mying", img) cv2.waitKey(0)

效果展示

對應圖片會出現在以mying命名的窗口中

在這里插入圖片描述

單窗口顯示多圖片

    # 單窗口顯示多圖片def opencv_muti_pic():img1 = cv2.imread('1.jpg')print(img1.shape)img2 = cv2.imread('1.jpg')print(img2.shape)img3 = cv2.imread('1.jpg')print(img3.shape)imgs = np.hstack([img1, img2, img3])# 展示多個cv2.imshow('mutil_pic', imgs)# 等待關閉cv2.waitKey(0)opencv_muti_pic()

效果展示

在這里插入圖片描述

鼠標事件

    鼠標事件 # 回調函數,用于處理鼠標事件 def mouse_callback(event, x, y, flags, param): if event == cv2.EVENT_MOUSEMOVE: # 鼠標移動事件 print('Mouse moved at (%d, %d)' % (x, y)) elif event == cv2.EVENT_LBUTTONDOWN: # 鼠標左鍵按下事件 print('Left button down at (%d, %d)' % (x, y)) elif event == cv2.EVENT_RBUTTONDOWN: # 鼠標右鍵按下事件 print('Right button down at (%d, %d)' % (x, y)) elif event == cv2.EVENT_MBUTTONDOWN: # 鼠標中鍵按下事件print('Middle button down at (%d, %d)' % (x, y)) elif event == cv2.EVENT_LBUTTONUP: # 鼠標左鍵釋放事件 print('Left button up at (%d, %d)' % (x, y)) elif event == cv2.EVENT_RBUTTONUP: # 鼠標右鍵釋放事件 print('Right button up at (%d, %d)' % (x, y)) elif event == cv2.EVENT_MBUTTONUP: # 鼠標中鍵釋放事件 print('Middle button up at (%d, %d)' % (x, y))elif event == cv2.EVENT_LBUTTONDBLCLK: # 鼠標左鍵雙擊事件 print('Left button double-clicked at (%d, %d)' % (x, y)) elif event == cv2.EVENT_RBUTTONDBLCLK: # 鼠標右鍵雙擊事件 print('Right button double-clicked at (%d, %d)' % (x, y)) elif event == cv2.EVENT_MBUTTONDBLCLK: # 鼠標中鍵雙擊事件 print('Middle button double-clicked at (%d, %d)' % (x, y))# 創建一個名為 "image" 的窗口cv2.namedWindow('image')# 讀取圖像img = cv2.imread('image.jpg')# 在窗口中顯示圖像cv2.imshow('image', src_image)# 設置鼠標回調函數cv2.setMouseCallback('image', mouse_callback)cv2.waitKey(0)# 關閉窗口cv2.destroyAllWindows()

效果展示

在這里插入圖片描述

對應輸出結果會隨鼠標指針在圖像上的位置而變化
在這里插入圖片描述

鍵盤事件

    # 鍵盤事件 img7 = numpy.zeros((100, 200)) cv2.imshow("windowname", img7 key1 = cv2.waitKey(0) # 任意按鍵按下,圖片顯示結束,返回按鍵鍵值 print("按下的鍵值:", key1) cv2.imshow("windowname2", img7) key2 = cv2.waitKey(5000) # 任意按鍵按下,圖片顯示結束,返回按鍵鍵值 print("按下的鍵值:", key2) cv2.destroyAllWindows()

效果展示

鍵盤事件

輸入q的情況,會返回對應的q的ASCII碼值

在這里插入圖片描述

第二個窗口長期不按會顯示-1的返回結果

在這里插入圖片描述

滑動條事件

    滑動條事件# 回調函數,用于處理滑動條變化事件def TrackbarCallback(value):print('Trackbar value is: %d' % value)# 創建一個名為 "image" 的窗口cv2.namedWindow('image')# 讀取圖像img = cv2.imread('image.jpg')# 在窗口中顯示圖像cv2.imshow('image', img)# 創建一個名為 "slider" 的滑動條cv2.createTrackbar('slider', 'image', 0, 100, TrackbarCallback)# 獲取滑動條的當前值slider_value = cv2.getTrackbarPos('slider', 'image')print('Initial slider value: %d' % slider_value)# 設置滑動條的值cv2.setTrackbarPos('slider', 'image', 50)# 循環等待鍵盤輸入while True:key = cv2.waitKey(10)if key == ord('q'):break# 關閉窗口cv2.destroyAllWindows()

效果展示
在這里插入圖片描述
通過鼠標滑動圖片上方的滑動條可以再控制臺動態的輸出滑動條信息

在這里插入圖片描述

四、實驗結果

實驗結果已經在實驗過程中寫出,實驗結果的所有截圖均可在實驗過程中查看,這里不做過多展示

五、實驗總結

通過本次實驗,我對以下知識有了更好的掌握:文件讀取和圖像顯示:學習如何使用OpenCV庫來讀取圖像文件并在窗口中顯示圖像,這是圖像處理的基礎操作。窗口事件:了解如何處理窗口事件,比如窗口的關閉事件,以確保圖像顯示過程中的交互性和穩定性。鼠標事件:學習如何捕獲和處理鼠標事件,比如點擊、移動和拖拽等,為圖像標記、交互式測量等功能的實現奠定基礎。鍵盤事件:掌握如何處理鍵盤事件,比如按鍵響應和組合操作,為實現鍵盤控制的圖像處理流程打下基礎。滑動條事件:了解如何創建和使用滑動條,實現圖像處理參數的實時調整和交互式控制。為進一步學習和應用計算機視覺和圖像處理奠定基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215544.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

唯創知音WTN6080-8S語音芯片在咖啡機中的應用:增添聲音魅力,提升用戶體驗

在快節奏的現代生活中,咖啡機已成為許多家庭和辦公室的必備設備,為人們提供了便捷和高品質的咖啡享受。然而,對于很多用戶來說,操作咖啡機可能是一項復雜而棘手的任務。為了解決這一難題,唯創知音WTN6080-8S語音芯片被…

Altman作了多少惡?排擠首席科學家出GPT5開發、離間董事會、PUA員工

在山姆奧特曼(Sam Altman)被OpenAI董事會突然解職后的幾天里,這個消息在科技圈引發轟動,該公司內部員工和許多科技界人士甚至將此舉比作一場政變。 奧特曼被解雇后立即傳出的說法是,OpenAI的廣大員工都很喜歡他&#x…

一入一出模擬量兩線制無源 4-20mA隔離變送器

一入一出模擬量兩線制無源 4-20mA隔離變送器 特征與應用: ◆薄體積,低成本,國際標準 DIN35mm 導軌安裝方式 ◆兩端隔離(輸入、輸出間相互隔離) ◆單通道輸入單通道輸出 ◆高精度等級(0.1%,0.2% F.S) ◆高線性度(0.1% F.S) ◆高隔離電壓(3000…

32位ADC布局的指導方針

接地必須是一個低阻抗連接,以使回流電流不受干擾地流回各自的源。接地面連接盡量短且直。使用過孔連接接地線時,應并聯多個過孔,以減小對地阻抗。 混合信號布局有時包含在一個位置捆綁在一起的單獨的模擬和數字地平面;但是,當模擬…

活動回顧 | 菊風亮相 GTC2023 全球流量大會

2023年12月5日-12月6日,由白鯨出海主辦的【GTC2023 全球流量大會】在中國深圳盛大召開。 本次大會薈聚海內外優質企業品牌,以專業的“展會”形式,全方位呈現跨境出海的成果,探索多元化的跨境商業模式,大會涵蓋社交娛樂…

【Jeecg Boot 3 - 第二天】1.1、后端 docker-compose 部署 JEECGBOOT3

一、場景 二、實戰 ? 2.1 修改配置文件 > 目的一:將 dev 變更為生產環境 prod > 目的二:方便spring項目調用docker同個network下的redis和mysql ? 2.2 編寫dockerfile ? 2.3 編寫docker-compose.yaml ? 2.4 打…

Qt/C++音視頻開發59-使用mdk-sdk組件/原qtav作者力作/性能兇殘/超級跨平臺

一、前言 最近一個月一直在研究mdk-sdk音視頻組件,這個組件是原qtav作者的最新力作,提供了各種各樣的示例demo,不僅限于支持C,其他各種比如java/flutter/web/android等全部支持,性能上也是杠杠的,目前大概…

cadence中如何在更新原理圖封裝

cadence中如何在更新原理圖封裝 一、更改原理圖封裝 當原理圖畫好后,如果我們發現某個封裝錯了,需要改動,需要找到你最初畫Library中器件封裝文件打開,進行修改,修改好后保存。 二、更新封裝 保存好后,…

C/C++ 有效的字母異位詞

題目: 給定兩個字符串s和t,編寫一個函數來判斷t是否是s的字母異位詞。 注:若s和t中每個字符出現的次數都相同,則稱s和t互為字母異位詞。 示例 1: 輸入: s "anagram", t "nagaram" 輸出: true …

2024年廣西職業院校技能大賽中職組《網絡安全》賽項樣題

2024年廣西職業院校技能大賽 中職組《網絡安全》賽項樣題 目錄 任務一 登錄安全加固 任務二 數據庫加固(Data) 任務三 Web安全加固(Web) 任務四 流量完整性保護(Web,Data) 任務五 事件監控 任務一 應急響應 任務二 …

295. 數據流的中位數

二分法實現 295. 數據流的中位數 295. 數據流的中位數 本題的第一個難點,要自己構造一個類(因為個人構造類的題目做的較少) 屬性: 數組的長度int 數組的數據結構 List保證原數組是一個有序數組,我使用了二分查找插入新…

【IDEA】反向撤銷操作快捷鍵 ctrl+shift+z 和搜狗熱鍵沖突的解決辦法

當我們執行某些操作時與搜狗熱鍵沖突,直接取消搜狗的快捷鍵即可!!!以下以 ctrlshiftz 為例。 在輸入懸浮框右鍵找到更多設置 按鍵里面找到系統功能快捷鍵設置 取消掉沖突的熱鍵即可

?gzip --- 對 gzip 格式的支持?

源代碼: Lib/gzip.py 此模塊提供的簡單接口幫助用戶壓縮和解壓縮文件,功能類似于 GNU 應用程序 gzip 和 gunzip。 數據壓縮由 zlib 模塊提供。 gzip 模塊提供 GzipFile 類和 open()、compress()、decompress() 幾個便利的函數。GzipFile 類可以讀寫 gz…

Codeforces Round 911 (Div. 2)

Codeforces Round 911 (Div. 2) A 有大于3的區間就可以無限取水&#xff0c;答案為2&#xff0c;其他的按照個數 #include <bits/stdc.h>using namespace std;void solve() {int n, k 0;cin >> n;string s, t "...";cin >> s;auto it search…

ARM day6

2.串口發送指令控制硬件工作 結果&#xff1a; uart.h #ifndef __UART_H__ #define __UART_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h"void myuart4_init(); void myputchar(char i); cha…

element-ui基本使用

基本使用&#xff1a;npm i element-uimain.js&#xff1a;/*** 該文件是整個項目的入口文件*/ import Vue from vue; import App from ./App.vue; import ElementUI from element-ui; // 引入Element全部樣式 import element-ui/lib/theme-chalk/index.css;// 關閉vue的生產提…

C++ this指針

通常情況下&#xff0c;類的成員函數都只涉及一個對象&#xff0c;即調用它的對象。但有時候方法可能涉及到兩個對象&#xff0c;在這種情況就需要使用到C的this指針。 class Stock { private: ... double total_val; ... public: double total() const {return total_val;} }…

【Linux】進程周邊002之進程狀態

&#x1f440;樊梓慕&#xff1a;個人主頁 &#x1f3a5;個人專欄&#xff1a;《C語言》《數據結構》《藍橋杯試題》《LeetCode刷題筆記》《實訓項目》《C》《Linux》 &#x1f31d;每一個不曾起舞的日子&#xff0c;都是對生命的辜負 目錄 前言 1.什么是狀態&#xff1f; …

ChatGLM 手記

ChatGLM-6B&#xff1a;GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 開源雙語對話語言模型 ChatGLM3&#xff1a; GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 開源雙語對話語言模型 chatglm.cpp&…

利用開源工具Chartmuseum,搭建私有helm chart倉庫

1、ChartMuseum是什么? ChartMuseum 是一個用 Go 語言寫的開源的 Helm Chart Repository 服務器,有多種 API 來完成對 Helm Chart Repository、Chart 以及 Server 的操作。所有可用的 API 以及使用方法可查看GitHub Repo。 2、ChartMuseum的安裝 ChartMuseum安裝可參考官網…