Python開発用のHighGUIホストコンピューター開発(1)

著者:ywsydwsbn
ワード数:5702
時間:2020-8-24 16:56
説明:最初の観点と同様に、習慣です!

HighGUIの概要

概要

アルゴリズムをテストし、アルゴリズムの効果を確認するときは、視覚化を使用する必要があります。しきい値を動的に調整します。フィードバックをリアルタイムで表示する場合は、編集にもグラフィカルインターフェースを使用する必要があるため、ここで使用する必要がありますopencv中的HighGUI

HighGUIこれはopencvのグラフィカル(GUI)コンポーネントであり、HighGUIを使用して簡単なPCを開発できます。

OpenCVのHighGUIはどのようなインターフェースを提供しますか?

主に以下の機能を提供

  • 複数のウィンドウ(Windows)を作成し、ウィンドウに画像を表示する
  • ボタンやスライダーなどのシンプルなインタラクティブコンポーネントを作成し、それらの値を取得する
  • マウスイベント、言語キーイベントを聞く

Matplotlibは画像とHighGUIの最大の違いを示しています

  1. Matplotlibある静的およびインタラクティブすることはできません
  2. HighGUI、ダイナミックでインタラクティブなことができます

HighGUIウィンドウ

namedWindow

image_winというウィンドウを作成します。

# 创建一个名字叫做 image_win的窗口
cv2.namedWindow('image_win')

また、いくつか参数(flags)渡して、ウィンドウのいくつかの設定を行うこともできます。

  • flags実際、これは整数であり、バイナリの特定のビットは、オプションがオプションA(バイナリ0)かオプションB(バイナリ1)かを示すために使用されます。

設定オプション1:ウィンドウサイズ

WINDOW_NORMAL 1は、ウィンドウをドラッグしてウィンドウサイズを変更できることを意味します。

WINDOW_AUTOSIZE 0デフォルト画面と画像のサイズに応じて、自動ズームします。ウィンドウサイズを手動で変更することはできません。

設定オプション2:アスペクト比の設定

WINDOW_FREERATIO 256はアスペクト比を修正しません。

WINDOW_KEEPRATIO 0デフォルトのアスペクト比は固定されています。つまり、ウィンドウをドラッグしてズームし、元のアスペクト比を維持する必要があります。

設定オプション3:ウィンドウGUIバージョン

WINDOW_GUI_NORMAL 16古いバージョンのウィンドウコンポーネント。ステータスバーとツールバーはサポートされていません。ウィンドウ上部のステータスバーとツールバーです。

WINDOW_GUI_EXPANDED 0新しいバージョンで機能が強化されたデフォルトの GUIウィンドウ。

ビット単位のORによって、パラメーターを介して同時に複数のオプションの値を渡すことができます。

  • flagsのデフォルト値は0で、これはWINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED

したがって、上記のステートメントは次と同等です。

# 创建一个名字叫做 image_win的窗口
cv2.namedWindow('image_win', flags=cv2.WINDOW_AUTOSIZE | cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_EXPANDED)

設定したい場合は、ウィンドウを自由にドラッグできます。次に、

# 创建一个名字叫做 image_win的窗口
cv2.namedWindow('image_win',  flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_EXPANDED)

そして、他の2つのオプションはデフォルトのオプションなので、値は0なので、次のように記述します。

# 创建一个名字叫做 image_win的窗口
cv2.namedWindow('image_win',  flags=cv2.WINDOW_NORMAL)

このウィンドウをドラッグアンドドロップで固定しない場合は宽高比(ratio)、実際に次のように記述します。

# 创建一个名字叫做 image_win的窗口
cv2.namedWindow('image_win', flags=cv2.WINDOW_NORMAL | cv2.WINDOW_FREERATIO)

ウィンドウに何も表示されない場合、ウィンドウは実際には占位符(Placeholder)関数です。

ウィンドウの作成例

import numpy as np
import cv2

# 创建一个名字叫做 image_win的窗口
cv2.namedWindow('image_win', cv2.WINDOW_NORMAL)

# windows下啥也不放置

# 检测按下的按钮
print("请按任意键关闭窗口")

# 如果没有下面的waitKey, 窗口会一闪而过, 后面会讲解
key_pressed = cv2.waitKey(0)

# cv2.destroyAllWindows()
cv2.destroyWindow('image_win')

ここに画像の説明を挿入

画像をインポートする

imread関数を使用してカラー画像/グレー画像を読み取る

imreadのAPI説明

画像を読み取るときは、cv2.imread関数を使用します。渡される最初のパラメーターは画像のパスです。

コードの同じディレクトリにlena1.jpgの写真を配置しました。
ここに画像の説明を挿入

これは間違いを起こしやすいことに注意してください。LinuxとWindowsのパス形式は異なり、相対パスと絶対パスにも注意する必要があります。

# 导入一张图像 模式为彩色图片
img = cv2.imread('lena1.jpg')

だから、あなたはレナのこの写真を読みました。

opencvはどの形式の画像をサポートしていますか?

具体我们可以通过查阅文档 , 在python终端中输入:

help(cv2.imread)

PS: 前提你得导入cv2 模块.

导入RBG彩图 还是是 灰度图?

第二个参数是图像颜色空间, 默认就是RGB彩图cv2.IMREAD_COLOR

上面这个语句跟下面作用是一样的.

# 导入一张图像 模式为彩色图片
img = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)

如果你想导入灰度图, 就需要传入 cv2.IMREAD_GRAYSCALE

img = cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)

窗口展示

显示/更新窗口里的图像

imshow的API讲解

在HighGUI展示图像, 需要使用到 imshow 函数, 第一个参数, 我们传入窗口的名称,第二个参数就是 Image 对象

# 展示图像
cv2.imshow('image',img)

如果image这个窗口之前并没有被声明, 那么同时会先创建一个名字叫做image的窗口, 然后再更新窗口里面的图像。

请注意,你执行完这个cv2.imshow()之后,窗口会一闪而过,这个时候你就需要使用到cv2.waitKey这个函数啦,后文有讲。

图片保存

图像的保存, 需要使用imwrite 函数.

图像的简单保存

这次我们读入的还是lena图。

ここに画像の説明を挿入

我们在读入img之后, 对图像进行各种操作, 例如图像均衡, 图像绘制等.

接下来, 直接使用imwrite 函数

  • 第一个参数./lena1.png 是即将保存的文件路径与文件名.
  • 第二个参数就是图像矩阵img.
import numpy as np
import cv2

# 导入一张图像 模式为彩色图片
img = cv2.imread('lena1.jpg', cv2.IMREAD_COLOR)

# 读入灰度图
cv2.imwrite('lena1.png', img)

ここに画像の説明を挿入
我这是将jpg图片保存为png图片

画像形式の具体的な保存は、画像パス名のサフィックスによって決定され、サフィックスは形式で画像.pngとして保存されpngます。

知識充電ステーション:
jpgとjpegは実際には同じものです。jpgはjpegの略です。jpegは、Joint Photographic Experts Group(Joint Photographic Experts Group)の略です。

画像圧縮保存

イメージの忠実度は、関数imwriteの3番目のパラメーターで指定されます。

3番目のパラメータは、画像の保存タイプによって意味が異なります

画像圧縮のデモンストレーションでは、引き続きLenaの画像を使用します。

JPEG圧縮保存

JPEG第三パラメータが表す画像の画質をcv2.IMWRITE_JPEG_QUALITY値の範囲が0〜100であり、デフォルト値は95です

cv2.imwrite('bear_quality_50.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 50])

我々は、10個のセグメントに品質レベルを分割するさまざまな品質レベルの下で写真を示します。

import numpy as np
import cv2

# 导入一张图像 模式为彩色图片
img = cv2.imread('lena1.jpg', cv2.IMREAD_COLOR)


for quality in range(0, 100, 10):

    # 保存为PNG图片
    cv2.imwrite('lena_quality_{}.jpg'.format(quality), img, [cv2.IMWRITE_JPEG_QUALITY, quality])

ここに画像の説明を挿入
画像サイズの比較:
ここに画像の説明を挿入

PNG圧縮保存

PNG対応する圧縮レベルを参照した cv2.IMWRITE_PNG_COMPRESSION

圧縮レベルの範囲は0〜9です。0は圧縮なしを意味し、9は最大圧縮を意味します。

たとえば、圧縮レベル4を使用して画像を格納する場合、次のように記述できます。

cv2.imwrite('bear_compression_4.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 4])

さまざまな圧縮レベルの影響を誰もが直感的に感じられるようにします。

import numpy as np
import cv2

# 导入一张图像 模式为彩色图片
img = cv2.imread('lena1.png')


for cmpi in range(0, 10):
    # 保存为PNG图片
    cv2.imwrite('lena_compression_{}.png'.format(cmpi), img, [cv2.IMWRITE_PNG_COMPRESSION, cmpi])
    print("压缩级别 {}".format(cmpi))

ここに画像の説明を挿入

ここに画像の説明を挿入
正直に言うと、画像を開いて鮮明さを確認します。肉眼では違いを確認することは非常に困難ですが、ファイル属性のファイルサイズによってそれを反映させることができます。
ここに画像の説明を挿入

ここでは、まずHighGUIの関連理論を詳しく説明し、対応する画像の演算処理について説明します次のセクションでは、HighGUIプロジェクト開発スキルの詳細な分析に焦点を当てます。

みんなで一緒に勉強することを歓迎します(フォロー、コメントなど)

おすすめ

転載: blog.csdn.net/ywsydwsbn/article/details/108199147