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

OpenCV快速入門(mén):窗口交互

這篇具有很好參考價(jià)值的文章主要介紹了OpenCV快速入門(mén):窗口交互。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

OpenCV是一種強(qiáng)大的計(jì)算機(jī)視覺(jué)庫(kù),廣泛用于圖像處理和計(jì)算機(jī)視覺(jué)應(yīng)用。本文將介紹OpenCV中的窗口交互功能,重點(diǎn)關(guān)注鼠標(biāo)和鍵盤(pán)的操作,以及如何添加窗口控件來(lái)實(shí)現(xiàn)更豐富的用戶(hù)體驗(yàn)。
OpenCV快速入門(mén):窗口交互,OpenCV,opencv,交互,人工智能

一、鼠標(biāo)操作

1.1 鼠標(biāo)操作簡(jiǎn)介

OpenCV提供了豐富的鼠標(biāo)交互功能,包括但不限于:

  • 獲取鼠標(biāo)的坐標(biāo)位置
  • 監(jiān)聽(tīng)鼠標(biāo)點(diǎn)擊事件
  • 監(jiān)聽(tīng)鼠標(biāo)滾輪事件

1.2 鼠標(biāo)事件類(lèi)型(event類(lèi)型)

在OpenCV中,通過(guò)設(shè)置鼠標(biāo)回調(diào)函數(shù),我們可以處理各種鼠標(biāo)事件。
以下是一些常見(jiàn)的鼠標(biāo)事件類(lèi)型:

  1. EVENT_LBUTTONDBLCLK(左鍵雙擊) = 7
  2. EVENT_LBUTTONDOWN(左鍵按下) = 1
  3. EVENT_LBUTTONUP(左鍵釋放) = 4
  4. EVENT_MBUTTONDBLCLK(中鍵雙擊) = 9
  5. EVENT_MBUTTONDOWN(中鍵按下) = 3
  6. EVENT_MBUTTONUP(中鍵釋放) = 6
  7. EVENT_MOUSEHWHEEL(鼠標(biāo)橫向滾輪滾動(dòng)) = 11
  8. EVENT_MOUSEMOVE(鼠標(biāo)移動(dòng)) = 0
  9. EVENT_MOUSEWHEEL(鼠標(biāo)滾輪滾動(dòng)) = 10
  10. EVENT_RBUTTONDBLCLK(右鍵雙擊) = 8
  11. EVENT_RBUTTONDOWN(右鍵按下) = 2
  12. EVENT_RBUTTONUP(右鍵釋放) = 5

1.3 鼠標(biāo)事件標(biāo)志(flags)

以下是一些常見(jiàn)的鼠標(biāo)事件標(biāo)志:

  1. EVENT_FLAG_ALTKEY(Alt鍵按下) = 32
  2. EVENT_FLAG_CTRLKEY(Ctrl鍵按下) = 8
  3. EVENT_FLAG_LBUTTON(左鍵按下) = 1
  4. EVENT_FLAG_MBUTTON(中鍵按下) = 4
  5. EVENT_FLAG_RBUTTON(右鍵按下) = 2
  6. EVENT_FLAG_SHIFTKEY(Shift鍵按下) = 16

通過(guò)設(shè)置鼠標(biāo)回調(diào)函數(shù),我們可以根據(jù)這些事件類(lèi)型和標(biāo)志來(lái)執(zhí)行相應(yīng)的操作。例如,在左鍵點(diǎn)擊時(shí)執(zhí)行某些操作,在鼠標(biāo)移動(dòng)時(shí)顯示坐標(biāo)信息,或者通過(guò)滾輪事件來(lái)放大或縮小圖像。這為圖像處理和計(jì)算機(jī)視覺(jué)應(yīng)用提供了靈活的交互性。

1.4 代碼示例

讓我們看一個(gè)簡(jiǎn)單的例子,如何通過(guò)OpenCV獲取鼠標(biāo)的坐標(biāo)位置:

import cv2

def resize_image(factor):
    global image
    height, width = image.shape[:2]
    new_height = int(height * factor)
    new_width = int(width * factor)
    image = cv2.resize(image, (new_width, new_height))
    cv2.imshow("Image", image)


def mouse_callback(event, x, y, flags, param):
    global image
    if event == cv2.EVENT_LBUTTONDOWN:
        print(f"左鍵點(diǎn)擊坐標(biāo):({x}, {y})")
    elif event == cv2.EVENT_RBUTTONDOWN:
        print(f"右鍵點(diǎn)擊坐標(biāo):({x}, {y})")
    elif event == cv2.EVENT_MBUTTONDOWN:
        print(f"中鍵點(diǎn)擊坐標(biāo):({x}, {y})")
    elif event == cv2.EVENT_MOUSEWHEEL:
        delta = flags
        if delta > 0:  # 滾輪向上滾動(dòng),放大圖像
            resize_image(1.1)
        elif delta < 0:  # 滾輪向下滾動(dòng),縮小圖像
            resize_image(0.9)
    elif event == cv2.EVENT_MOUSEMOVE:
        # 在圖像左上角顯示坐標(biāo)
        coord_text = f"({x}, {y})"
        image_copy = cv2.putText(image.copy(), coord_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow("Image", image_copy)


# 創(chuàng)建圖像窗口
cv2.namedWindow("Image")
# 設(shè)置鼠標(biāo)回調(diào)函數(shù)
cv2.setMouseCallback("Image", mouse_callback)
# 讀取圖像
image = cv2.imread("tulips.jpg")
# 在窗口中顯示圖像
cv2.imshow("Image", image.copy())
# 等待用戶(hù)按下任意鍵退出
cv2.waitKey(0)
# 關(guān)閉窗口
cv2.destroyAllWindows()

OpenCV快速入門(mén):窗口交互,OpenCV,opencv,交互,人工智能

在上述代碼中,我們通過(guò)OpenCV實(shí)現(xiàn)了鼠標(biāo)的各種操作,并結(jié)合了圖像處理和顯示的功能,讓用戶(hù)能夠更直觀(guān)地感受到鼠標(biāo)事件的影響。

1.4.1 獲取鼠標(biāo)坐標(biāo)位置

通過(guò)設(shè)置鼠標(biāo)回調(diào)函數(shù) cv2.setMouseCallback,我們可以監(jiān)聽(tīng)鼠標(biāo)的各種事件。在這個(gè)例子中,我們主要關(guān)注了鼠標(biāo)左鍵、右鍵、中鍵的點(diǎn)擊事件,以及鼠標(biāo)的滾輪事件。當(dāng)鼠標(biāo)左鍵、右鍵、中鍵被點(diǎn)擊時(shí),我們?cè)诳刂婆_(tái)輸出了相應(yīng)的坐標(biāo)信息。

if event == cv2.EVENT_LBUTTONDOWN:
    print(f"左鍵點(diǎn)擊坐標(biāo):({x}, {y})")
elif event == cv2.EVENT_RBUTTONDOWN:
    print(f"右鍵點(diǎn)擊坐標(biāo):({x}, {y})")
elif event == cv2.EVENT_MBUTTONDOWN:
    print(f"中鍵點(diǎn)擊坐標(biāo):({x}, {y})")

1.4.2 監(jiān)聽(tīng)鼠標(biāo)滾輪事件

通過(guò)監(jiān)聽(tīng)鼠標(biāo)滾輪事件,我們可以實(shí)現(xiàn)圖像的放大和縮小。在這個(gè)例子中,當(dāng)鼠標(biāo)滾輪向上滾動(dòng)時(shí),圖像放大1.1倍;當(dāng)鼠標(biāo)滾輪向下滾動(dòng)時(shí),圖像縮小0.9倍。

elif event == cv2.EVENT_MOUSEWHEEL:
    delta = flags
    if delta > 0:  # 滾輪向上滾動(dòng),放大圖像
        resize_image(1.1)
    elif delta < 0:  # 滾輪向下滾動(dòng),縮小圖像
        resize_image(0.9)

1.4.3 在圖像中顯示鼠標(biāo)坐標(biāo)

通過(guò)在圖像上繪制文本,我們?cè)趫D像左上角顯示了當(dāng)前鼠標(biāo)的坐標(biāo)位置。這使得用戶(hù)可以實(shí)時(shí)了解鼠標(biāo)相對(duì)于圖像的位置。

elif event == cv2.EVENT_MOUSEMOVE:
    # 在圖像左上角顯示坐標(biāo)
    coord_text = f"({x}, {y})"
    image_copy = cv2.putText(image.copy(), coord_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv2.imshow("Image", image_copy)

通過(guò)這些功能的組合,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單而有趣的OpenCV窗口交互示例,展示了鼠標(biāo)事件如何影響圖像的顯示和處理。這對(duì)于圖像處理和計(jì)算機(jī)視覺(jué)應(yīng)用中的交互性操作具有很大的實(shí)用性。

二、鍵盤(pán)操作

OpenCV不僅支持強(qiáng)大的圖像處理功能,還提供了靈活的鍵盤(pán)交互功能,使得用戶(hù)能夠通過(guò)鍵盤(pán)來(lái)控制圖像的顯示和處理。我們將簡(jiǎn)要探討waitKey的操作以及等待方法的使用。

2.1 代碼示例

在OpenCV中,我們可以通過(guò)監(jiān)聽(tīng)鍵盤(pán)按鍵事件來(lái)執(zhí)行相應(yīng)的操作。以下是一個(gè)簡(jiǎn)單的示例,演示了如何通過(guò)鍵盤(pán)按下事件來(lái)實(shí)現(xiàn)圖像的放大和縮?。?/p>

import cv2


def resize_image(factor):
    global image
    height, width = image.shape[:2]
    new_height = int(height * factor)
    new_width = int(width * factor)
    image = cv2.resize(image, (new_width, new_height))
    cv2.imshow("Image", image)


# 讀取圖像
image = cv2.imread("tulips.jpg")

# 創(chuàng)建圖像窗口
cv2.namedWindow("Image")
cv2.imshow("Image", image)

while True:
    key = cv2.waitKey(0)

    if key == ord('q'):  # 按下 'q' 鍵退出循環(huán)
        break
    elif key == ord('+'):  # 按下 '+' 鍵放大圖像
        resize_image(1.1)
    elif key == ord('-'):  # 按下 '-' 鍵縮小圖像
        resize_image(0.9)
# 關(guān)閉窗口
cv2.destroyAllWindows()

在這個(gè)例子中,我們通過(guò)cv2.waitKey(0)監(jiān)聽(tīng)鍵盤(pán)按鍵事件,ord函數(shù)將字符轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼。按下 ‘q’ 鍵退出循環(huán),按下 ‘+’ 鍵放大圖像,按下 ‘-’ 鍵縮小圖像。這樣,用戶(hù)可以通過(guò)簡(jiǎn)單的鍵盤(pán)操作來(lái)改變圖像的大小。
注:輸入 'q' 時(shí),需要在英文輸入法的情況下按下。

2.2 waitKey的等待方法

cv2.waitKey方法不僅用于檢測(cè)按鍵事件,還可以設(shè)置一個(gè)參數(shù),表示等待時(shí)間(毫秒)。

# 等待1秒
cv2.waitKey(1000)
# 關(guān)閉窗口
cv2.destroyAllWindows()

通過(guò)這些簡(jiǎn)單而實(shí)用的鍵盤(pán)交互技巧,我們可以更靈活地控制OpenCV中圖像的顯示和處理,使得圖像處理過(guò)程更加交互化。

三、添加窗口控件

在OpenCV中,通過(guò)添加窗口控件,我們可以實(shí)現(xiàn)更豐富的圖形用戶(hù)界面(GUI),使用戶(hù)能夠通過(guò)滑動(dòng)條、按鈕等控件與圖像進(jìn)行交互。這里將以滑動(dòng)條為例,詳細(xì)描述如何在OpenCV窗口中添加控件。

3.1 滑動(dòng)條(Trackbar)的基本使用

滑動(dòng)條是OpenCV中最常用的窗口控件之一,可以用于調(diào)整參數(shù),比如圖像的亮度、對(duì)比度等。以下是一個(gè)簡(jiǎn)單的例子,演示如何在OpenCV窗口中添加滑動(dòng)條:

import cv2

def on_trackbar_change(value):
    # 當(dāng)滑動(dòng)條數(shù)值改變時(shí)調(diào)用的回調(diào)函數(shù)
    print(f"滑動(dòng)條數(shù)值:{value}")

# 創(chuàng)建一個(gè)圖像窗口
cv2.namedWindow("Image")

# 創(chuàng)建一個(gè)滑動(dòng)條,并指定其所屬的窗口、滑動(dòng)條的名稱(chēng)、最小值、最大值、回調(diào)函數(shù)
cv2.createTrackbar("Trackbar", "Image", 50, 100, on_trackbar_change)

while True:
    # 等待用戶(hù)按下任意鍵退出循環(huán)
    key = cv2.waitKey(1)
    if key != -1:
        break

# 關(guān)閉窗口
cv2.destroyAllWindows()

在這個(gè)例子中,我們通過(guò)cv2.createTrackbar創(chuàng)建了一個(gè)名為 “Trackbar” 的滑動(dòng)條,它隸屬于名為 “Image” 的窗口,初始值為50,最小值為0,最大值為100。每次滑動(dòng)條數(shù)值發(fā)生改變時(shí),都會(huì)調(diào)用 on_trackbar_change 這個(gè)回調(diào)函數(shù)。

3.2 自定義滑動(dòng)條回調(diào)函數(shù)

我們可以根據(jù)實(shí)際需求,自定義滑動(dòng)條數(shù)值發(fā)生變化時(shí)的回調(diào)函數(shù)。例如,在滑動(dòng)條變化時(shí)實(shí)時(shí)調(diào)整圖像的亮度、對(duì)比度等參數(shù),或者觸發(fā)其他特定的操作。

import cv2


def on_channel_change(value):
    global image
    # 獲取各個(gè)滑動(dòng)條的值
    brightness = cv2.getTrackbarPos("Brightness", "Image") - 50
    red = max(cv2.getTrackbarPos("Red", "Image") - 100, 0)
    green = max(cv2.getTrackbarPos("Green", "Image") - 100, 0)
    blue = max(cv2.getTrackbarPos("Blue", "Image") - 100, 0)

    # 調(diào)整圖像的亮度和RGB通道
    adjusted_image = cv2.addWeighted(image, 1, image, 0, brightness)
    adjusted_image[:, :, 2] += red
    adjusted_image[:, :, 1] += green
    adjusted_image[:, :, 0] += blue

    # 顯示調(diào)整后的圖像
    cv2.imshow("Image", adjusted_image)


# 創(chuàng)建圖像窗口
cv2.namedWindow("Image")

# 創(chuàng)建滑動(dòng)條,并指定窗口、滑動(dòng)條名稱(chēng)、初始值、最大值、回調(diào)函數(shù)
cv2.createTrackbar("Brightness", "Image", 50, 100, on_channel_change)
cv2.createTrackbar("Red", "Image", 100, 200, on_channel_change)
cv2.createTrackbar("Green", "Image", 100, 200, on_channel_change)
cv2.createTrackbar("Blue", "Image", 100, 200, on_channel_change)

# 讀取圖像
image = cv2.imread("tulips.jpg")

# 在窗口中顯示圖像
cv2.imshow("Image", image)

# 等待用戶(hù)按下任意鍵退出
cv2.waitKey(0)

# 關(guān)閉窗口
cv2.destroyAllWindows()

OpenCV快速入門(mén):窗口交互,OpenCV,opencv,交互,人工智能

在這個(gè)例子中,on_channel_change 函數(shù)會(huì)在滑動(dòng)條數(shù)值發(fā)生變化時(shí)被調(diào)用,根據(jù)數(shù)值的變化調(diào)整圖像的亮度和顏色,并實(shí)時(shí)在窗口中顯示調(diào)整后的圖像。

通過(guò)這些示例,可以更好地理解如何在OpenCV中添加滑動(dòng)條及其回調(diào)函數(shù),從而實(shí)現(xiàn)圖像處理中的交互操作。這提供了一種靈活的方式,使用戶(hù)能夠通過(guò)控件與圖像進(jìn)行動(dòng)態(tài)交互。

四、實(shí)現(xiàn)鼠標(biāo)跟隨繪制方框的交互效果

在圖像處理中,有時(shí)候需要手動(dòng)標(biāo)注或選擇感興趣區(qū)域。通過(guò)結(jié)合鼠標(biāo)事件和按鍵處理,我們可以實(shí)現(xiàn)鼠標(biāo)跟隨繪制方框的交互效果。下面通過(guò)一個(gè)簡(jiǎn)單的例子詳細(xì)介紹如何在OpenCV中實(shí)現(xiàn)這一功能。

4.1 代碼實(shí)現(xiàn)

下面是一個(gè)簡(jiǎn)單的例子,通過(guò)OpenCV實(shí)現(xiàn)鼠標(biāo)跟隨繪制方框的功能。代碼中還包含了撤銷(xiāo)上一個(gè)框線(xiàn)的操作。

import cv2

drawing = False
start_point = (-1, -1)
rectangles = []  # 存儲(chǔ)繪制的框線(xiàn)信息的列表


def mouse_callback(event, x, y, flags, param):
    global drawing, start_point
    # 檢測(cè)Ctrl鍵狀態(tài)
    ctrl_pressed = flags & cv2.EVENT_FLAG_CTRLKEY == cv2.EVENT_FLAG_CTRLKEY

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        start_point = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        if ctrl_pressed:
            # 如果按下Ctrl鍵,畫(huà)藍(lán)色的框線(xiàn)
            cv2.rectangle(image, start_point, (x, y), (255, 0, 0), 2)
            rectangles.append(((start_point[0], start_point[1]), (x, y), (255, 0, 0)))
        else:
            # 否則,畫(huà)綠色的框線(xiàn)
            cv2.rectangle(image, start_point, (x, y), (0, 255, 0), 2)
            rectangles.append(((start_point[0], start_point[1]), (x, y), (0, 255, 0)))
        cv2.imshow("Image", image)
    elif event == cv2.EVENT_MOUSEMOVE:
        # 清空?qǐng)D像
        image_temp = image.copy()
        # 灰色橫線(xiàn)
        cv2.line(image_temp, (x, 0), (x, image.shape[0]), (127, 127, 127), 1, cv2.LINE_AA)
        # 灰色豎線(xiàn)
        cv2.line(image_temp, (0, y), (image.shape[1], y), (127, 127, 127), 1, cv2.LINE_AA)

        if drawing:
            # 根據(jù)Ctrl鍵狀態(tài)畫(huà)藍(lán)色或綠色的框線(xiàn)
            if ctrl_pressed:
                cv2.rectangle(image_temp, start_point, (x, y), (255, 0, 0), 2)
            else:
                cv2.rectangle(image_temp, start_point, (x, y), (0, 255, 0), 2)

        cv2.imshow("Image", image_temp)


def undo_last_rectangle():
    global rectangles, image
    if rectangles:
        # 撤銷(xiāo)上一個(gè)框線(xiàn)
        rectangles.pop()
        # 清空?qǐng)D像
        image = cv2.imread("tulips.jpg")
        # 重新繪制之前的所有框線(xiàn)
        for rect_info in rectangles:
            cv2.rectangle(image, rect_info[0], rect_info[1], rect_info[2], 2)
        cv2.imshow("Image", image)


# 創(chuàng)建圖像窗口
cv2.namedWindow("Image")

# 設(shè)置鼠標(biāo)回調(diào)函數(shù)
cv2.setMouseCallback("Image", mouse_callback)

# 讀取圖像
image = cv2.imread("tulips.jpg")

# 在窗口中顯示圖像
cv2.imshow("Image", image)

while True:
    key = cv2.waitKey(0)

    if key == 27:  # 退出鍵
        break
    elif key == ord('z') or key == ord('Z'):  # 按下Z鍵
        undo_last_rectangle()

# 關(guān)閉窗口
cv2.destroyAllWindows()

4.2 代碼解析

  1. 鼠標(biāo)事件處理: mouse_callback 函數(shù)處理鼠標(biāo)事件,包括鼠標(biāo)按下、抬起和移動(dòng)事件。在按下左鍵時(shí),標(biāo)記開(kāi)始繪制;抬起左鍵時(shí),停止繪制,并根據(jù)Ctrl鍵狀態(tài)選擇畫(huà)綠色或藍(lán)色框線(xiàn);在移動(dòng)過(guò)程中,顯示灰色的輔助線(xiàn)。

  2. 撤銷(xiāo)操作: undo_last_rectangle 函數(shù)用于撤銷(xiāo)上一個(gè)繪制的框線(xiàn)。它會(huì)清空?qǐng)D像并重新繪制之前所有的框線(xiàn)。

  3. 主循環(huán): 主循環(huán)監(jiān)聽(tīng)鍵盤(pán)按鍵事件,按下 “Z” 鍵時(shí)執(zhí)行撤銷(xiāo)操作,按下 “ESC” 鍵時(shí)退出循環(huán)。

4.3 運(yùn)行代碼

在彈出的圖像窗口中,可以通過(guò)鼠標(biāo)繪制綠色或藍(lán)色的框線(xiàn),按下 “Z” 鍵撤銷(xiāo)上一個(gè)框線(xiàn),按下 “ESC” 鍵退出程序。

這個(gè)例子演示了如何結(jié)合鼠標(biāo)事件和鍵盤(pán)事件,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的交互式圖像標(biāo)注工具。我們可以根據(jù)實(shí)際需求擴(kuò)展這個(gè)例子,添加更多的交互功能。

OpenCV快速入門(mén):窗口交互,OpenCV,opencv,交互,人工智能

五、自由調(diào)節(jié)窗口圖像的尺寸

在圖像處理和計(jì)算機(jī)視覺(jué)應(yīng)用中,有時(shí)候需要對(duì)圖像窗口進(jìn)行自由調(diào)節(jié),以便更好地查看細(xì)節(jié)或全局圖像。通過(guò)監(jiān)聽(tīng)鼠標(biāo)事件,我們可以實(shí)現(xiàn)自由調(diào)節(jié)窗口圖像尺寸的效果。以下是一個(gè)使用OpenCV的簡(jiǎn)單例子,演示了如何通過(guò)鼠標(biāo)事件實(shí)現(xiàn)窗口圖像尺寸的自由調(diào)節(jié)。

5.1 代碼實(shí)現(xiàn)

import cv2

resizing = False
window_name = "Image"

def mouse_callback(event, x, y, flags, param):
    global resizing

    if event == cv2.EVENT_LBUTTONDOWN:
        resizing = True

    elif event == cv2.EVENT_LBUTTONUP:
        resizing = False

    elif event == cv2.EVENT_MOUSEMOVE:
        if resizing:
            # 獲取窗口的位置和大小
            rect = cv2.getWindowImageRect(window_name)
            win_x, win_y, win_width, win_height = rect

            # 判斷鼠標(biāo)是否在窗口的邊緣
            if win_x < x < win_x + win_width and win_y < y < win_y + win_height:
                cv2.resizeWindow(window_name, x - win_x, y - win_y)


# 創(chuàng)建圖像窗口
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)

# 設(shè)置鼠標(biāo)回調(diào)函數(shù)
cv2.setMouseCallback(window_name, mouse_callback)

# 讀取圖像
image = cv2.imread("tulips.jpg")

# 在窗口中顯示圖像
cv2.imshow(window_name, image)

# 設(shè)置窗口的初始大小為圖像的大小
cv2.resizeWindow(window_name, image.shape[1], image.shape[0])

# 等待用戶(hù)按下任意鍵退出
cv2.waitKey(0)

# 關(guān)閉窗口
cv2.destroyAllWindows()

5.2 代碼解釋

  1. 鼠標(biāo)事件處理: mouse_callback 函數(shù)用于處理鼠標(biāo)事件,包括按下左鍵、抬起左鍵和鼠標(biāo)移動(dòng)。當(dāng)鼠標(biāo)按下左鍵時(shí),設(shè)置 resizing 為 True;當(dāng)抬起左鍵時(shí),設(shè)置 resizing 為 False。在鼠標(biāo)移動(dòng)過(guò)程中,如果 resizing 為 True,則獲取窗口的位置和大小,并根據(jù)鼠標(biāo)位置調(diào)整窗口大小。

  2. 創(chuàng)建圖像窗口: 使用 cv2.namedWindow 創(chuàng)建一個(gè)圖像窗口,并指定窗口名為 “Image”,設(shè)置窗口標(biāo)志為 cv2.WINDOW_NORMAL,這樣窗口大小可以被調(diào)整。

  3. 設(shè)置鼠標(biāo)回調(diào)函數(shù): 使用 cv2.setMouseCallback 設(shè)置鼠標(biāo)回調(diào)函數(shù),即上述的 mouse_callback 函數(shù)。

  4. 顯示圖像和設(shè)置初始窗口大?。?/strong> 讀取圖像,使用 cv2.imshow 在窗口中顯示圖像,并通過(guò) cv2.resizeWindow 設(shè)置窗口的初始大小為圖像的大小。

5.3 運(yùn)行代碼

在彈出的圖像窗口中,我們可以通過(guò)按下左鍵并拖動(dòng)鼠標(biāo)自由調(diào)節(jié)窗口的大小。這種交互式的窗口調(diào)節(jié)方式對(duì)于查看大尺寸圖像或處理細(xì)節(jié)較多的圖像非常有用。

OpenCV快速入門(mén):窗口交互,OpenCV,opencv,交互,人工智能

六、中文顯示亂碼問(wèn)題

在圖像處理中,有時(shí)候我們需要在圖像上顯示中文字符。為了在OpenCV中實(shí)現(xiàn)中文顯示,我們需要確保系統(tǒng)的字體支持中文。

6.1 實(shí)現(xiàn)步驟

  1. 創(chuàng)建一個(gè)空白圖像
    首先,我們創(chuàng)建一個(gè)空白圖像,以便后續(xù)在圖像上添加中文字符。
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont

# 創(chuàng)建一個(gè)空白圖像
height, width, _ = 300, 500, 3
image = np.ones((height, width, 3), np.uint8) * 255
  1. 設(shè)置中文字體
    選擇一個(gè)支持中文的字體,這里以宋體為例。我們需要替換 font_path 變量為本地系統(tǒng)中的字體文件路徑,確保字體文件支持中文。
    如果沒(méi)有字體文件,還需要自行下載字體文件。
# 設(shè)置中文字體
font_path = r"C:\Windows\Fonts\simsun.ttc"  # 替換為本地的字體文件路徑
font_size = 30
font = ImageFont.truetype(font_path, font_size)
  1. 在圖像上添加中文字符
    使用 PIL 庫(kù)來(lái)在圖像上添加中文字符。在這個(gè)例子中,我們添加了一個(gè)簡(jiǎn)單的中文字符 “你好,OpenCV!”。
# 在圖像上添加中文字符
image_pil = Image.fromarray(image)
draw = ImageDraw.Draw(image_pil)
text = "你好,OpenCV!"
text_position = (50, 150)
text_color = (0, 0, 0)  # 黑色
draw.text(text_position, text, font=font, fill=text_color)
  1. 轉(zhuǎn)換回OpenCV圖像格式并顯示
    PIL 圖像格式轉(zhuǎn)換回OpenCV格式,并通過(guò)OpenCV顯示圖像。
# 轉(zhuǎn)換回OpenCV圖像格式
image = np.array(image_pil)

# 顯示圖像
cv2.imshow("Chinese Text", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

6.2 代碼實(shí)現(xiàn)

以下是一個(gè)簡(jiǎn)單的例子,演示了如何在OpenCV中顯示中文字符。

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont

# 創(chuàng)建一個(gè)空白圖像
height, width, _ = 300, 500, 3
image = np.ones((height, width, 3), np.uint8) * 255

# 設(shè)置中文字體
font_path = r"C:\Windows\Fonts\simsun.ttc"  # 替換為本地的字體文件路徑
font_size = 30
font = ImageFont.truetype(font_path, font_size)

# 在圖像上添加中文字符
image_pil = Image.fromarray(image)
draw = ImageDraw.Draw(image_pil)
text = "你好,OpenCV!"
text_position = (50, 150)
text_color = (0, 0, 0)  # 黑色
draw.text(text_position, text, font=font, fill=text_color)

# 轉(zhuǎn)換回OpenCV圖像格式
image = np.array(image_pil)

# 顯示圖像
cv2.imshow("Chinese Text", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCV快速入門(mén):窗口交互,OpenCV,opencv,交互,人工智能


總結(jié)

通過(guò)這篇文章,我們快速入門(mén)了OpenCV的窗口交互功能。從鼠標(biāo)和鍵盤(pán)操作到窗口控件的添加,我們探索了多種交互方式,并通過(guò)實(shí)例演示了如何實(shí)現(xiàn)調(diào)整圖像亮度和顏色、鼠標(biāo)跟隨繪制綠色框、自由調(diào)節(jié)窗口圖像尺寸以及中文顯示。
希望這些簡(jiǎn)單而實(shí)用的示例能夠更好地理解和運(yùn)用OpenCV的窗口交互功能。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-759130.html

到了這里,關(guān)于OpenCV快速入門(mén):窗口交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 人工智能算法工程師面試題——之OpenCV必背匯總(四)

    在OpenCV中,圖像融合通常指的是將兩個(gè)或更多圖像以某種方式組合在一起,以創(chuàng)建一個(gè)新的圖像。這個(gè)過(guò)程可以用于多種目的,比如藝術(shù)效果、圖像修復(fù)或信息增強(qiáng)。實(shí)現(xiàn)圖像融合的一種常見(jiàn)方法是通過(guò)加權(quán)求和,也就是每個(gè)像素位置上將不同圖像的像素值按照一定的權(quán)重相

    2024年02月21日
    瀏覽(20)
  • 【AIGC掃盲】人工智能大模型快速入門(mén)

    人工智能大模型的技術(shù)框架主要有以下幾種: TensorFlow :這是一個(gè)由Google Brain團(tuán)隊(duì)開(kāi)發(fā)的開(kāi)源庫(kù),用于進(jìn)行高性能數(shù)值計(jì)算,特別是用于訓(xùn)練和運(yùn)行深度學(xué)習(xí)模型。TensorFlow提供了一種稱(chēng)為計(jì)算圖的編程模型,它允許用戶(hù)定義復(fù)雜的計(jì)算并自動(dòng)計(jì)算梯度。此外,TensorFlow還提供

    2024年02月20日
    瀏覽(24)
  • 可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上

    可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上

    OpenCV能夠處理圖像、視頻、深度圖像等各種類(lèi)型的視覺(jué)數(shù)據(jù),在某些情況下,盡管OpenCV可以顯示窗口,但PyQt5可能更適合用于創(chuàng)建復(fù)雜的交互式應(yīng)用程序,而自帶GPU的H618就成為了這些圖像顯示的最佳載體。 這里分享一個(gè)代碼,功能是使用圖像處理庫(kù)opencv從攝像頭獲取數(shù)據(jù),縮

    2024年02月01日
    瀏覽(25)
  • 【數(shù)據(jù)分析入門(mén)】人工智能、數(shù)據(jù)分析和深度學(xué)習(xí)是什么關(guān)系?如何快速入門(mén) Python Pandas?

    【數(shù)據(jù)分析入門(mén)】人工智能、數(shù)據(jù)分析和深度學(xué)習(xí)是什么關(guān)系?如何快速入門(mén) Python Pandas?

    本文詳細(xì)介紹了人工智能、數(shù)據(jù)分析和深度學(xué)習(xí)之間的關(guān)系,并就數(shù)據(jù)分析所需的Pandas庫(kù)做了胎教般的入門(mén)引導(dǎo)。祝讀得開(kāi)心! ??本文是原 《數(shù)據(jù)分析大全》 、現(xiàn)改名為 《數(shù)據(jù)分析》 專(zhuān)欄的第二篇,我在寫(xiě)這篇文章的時(shí)候突然意識(shí)到—— 單靠我是不可能把數(shù)據(jù)分析的方

    2024年02月14日
    瀏覽(37)
  • OpenCV入門(mén)(十六)快速學(xué)會(huì)OpenCV 15 圖像分割

    OpenCV入門(mén)(十六)快速學(xué)會(huì)OpenCV 15 圖像分割

    作者:Xiou 圖像分割主要是指將圖像分成各具特性的區(qū)域并提取出感興趣目標(biāo)的技術(shù)。圖像分割是數(shù)字圖像分析中的重要環(huán)節(jié),在整個(gè)研究中起著承前啟后的作用,既是對(duì)所有圖像預(yù)處理效果的一個(gè)檢驗(yàn),也是后續(xù)進(jìn)行圖像分析與解譯的基礎(chǔ)。 圖像閾值化分割是一種傳統(tǒng)的、

    2024年02月09日
    瀏覽(21)
  • OpenCV入門(mén)(十九)快速學(xué)會(huì)OpenCV 18 圓環(huán)檢測(cè)

    OpenCV入門(mén)(十九)快速學(xué)會(huì)OpenCV 18 圓環(huán)檢測(cè)

    作者:Xiou 霍夫變換除了用來(lái)檢測(cè)直線(xiàn)外,也能用來(lái)檢測(cè)其他幾何對(duì)象。實(shí)際上,只要是能夠用一個(gè)參數(shù)方程表示的對(duì)象,都適合用霍夫變換來(lái)檢測(cè)。用霍夫圓變換來(lái)檢測(cè)圖像中的圓,與使用霍夫直線(xiàn)變換檢測(cè)直線(xiàn)的原理類(lèi)似。 在霍夫圓變換中,需要考慮圓半徑和圓心(x坐標(biāo)

    2024年02月16日
    瀏覽(15)
  • OpenCV入門(mén)(十四)快速學(xué)會(huì)OpenCV 13 邊緣檢測(cè)

    OpenCV入門(mén)(十四)快速學(xué)會(huì)OpenCV 13 邊緣檢測(cè)

    作者:Xiou 邊緣檢測(cè)是圖像處理和計(jì)算機(jī)視覺(jué)中的基本問(wèn)題,邊緣檢測(cè)的目的是標(biāo)識(shí)數(shù)字圖像中亮度變化明顯的點(diǎn)。圖像屬性中的顯著變化通常反映了屬性的重要事件和變化,包括深度不連續(xù)、表面方向不連續(xù)、物質(zhì)屬性變化和場(chǎng)景照明變化。邊緣檢測(cè)特征是提取中的一個(gè)研

    2024年02月04日
    瀏覽(33)
  • OpenCV入門(mén)(二十八)快速學(xué)會(huì)OpenCV 27 圖像匹配

    OpenCV入門(mén)(二十八)快速學(xué)會(huì)OpenCV 27 圖像匹配

    作者:Xiou 如果說(shuō)SIFT還很年輕,SURF更年輕,那么ORB就還處于嬰兒期。ORB首次發(fā)布于2011年,作為SIFT和SURF的一個(gè)快速代替品。該算法發(fā)表在論文“ORB:an efficient alternative to SIFT or SURF”上,可以在 http://www.willowgarage.com/sites/default/files/orb_final.pdf 處找到PDF格式的論文。ORB融合了FAS

    2023年04月09日
    瀏覽(32)
  • opencv快速入門(mén)【python]

    opencv快速入門(mén)【python]

    1.讀入圖像 使用cv2.imread()讀取圖像 2.顯示圖像 使用函數(shù) cv2.imshow() 顯示圖像。 3.保存圖像 使用函數(shù)cv2.imwrite()來(lái)保存函數(shù) 學(xué)習(xí)目標(biāo): 掌握用opencv繪制出不同幾何圖形 熟練應(yīng)用如下函數(shù):cv2.line(),cv2.circle(),cv2.rectangle() ,cv2.ellipse() ,cv2.putText() 等。 繪出幾何圖形的第一步就

    2024年02月02日
    瀏覽(17)
  • OpenCv快速入門(mén)(python版)

    OpenCv快速入門(mén)(python版)

    OpenCV是一個(gè)(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可以運(yùn)行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列 C 函數(shù)和少量 C++ 類(lèi)構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。 在學(xué)習(xí)過(guò)程中遇到問(wèn)題最好

    2024年02月14日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包