Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)

本篇將介紹如何使用 OpenCV 與 Python 來作彩色影像轉YCbCr(RGB to YCbCr 或 BGR to YCbCr),在寫 Python 影像處理程式時常會用到 OpenCV cvtColor 作顏色空間轉換的功能,接下來介紹怎麼使用 Python 搭配 OpenCV 模組來進行 RGB/BGR 轉 YCbCr 彩色轉YCbCr空間。

範例. 彩色影像轉YCbCr

以下範例 ShengYu 是將 lena.jpg 來作彩色影像轉YCbCr示範,
使用 cv2.cvtColor 將彩色轉 YCbCr 的第二個參數是使用 COLOR_BGR2YCR_CB,不是使用 CV_BGR2YCrCb,也不是 CV_BGR2YCBCR。

使用 cv2.cvtColor 轉換顏色空間時,第二個參數與YCbCr相關的有:
COLOR_BGR2YCR_CB
COLOR_YCR_CB2BGR
COLOR_RGB2YCR_CB
COLOR_YCR_CB2RGB
opencv 預設的排列方式為BGR,而不是RGB唷!
所以這邊使用的是 cv2.COLOR_BGR2YCR_CB

opencv-rgb-to-ycbcr.py
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2

image = cv2.imread('lena.jpg')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2YCR_CB)
cv2.imshow('Input', image)
cv2.imshow('Result', hsv)
cv2.waitKey(0)

結果如下圖所示:

cv2.cvtColor 參數的詳細細節請參考這裡

當然實際上使用時不會只是單純RGB轉換成YCbCr就結束了,通常會去針對YCbCr顏色區間去作後續的處理,常見的例子有膚色偵測,關於這部分下次我再寫一篇給大家講解。

參考
How to convert an rgb image to ycrcb colour space in opencv python - Stack Overflow
https://stackoverflow.com/questions/23396501/how-to-convert-an-rgb-image-to-ycrcb-colour-space-in-opencv-python

其它相關文章推薦
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV resize 圖片縮放
小專案 Python OpenCV 圖片轉字元圖畫

Python OpenCV 彩色轉HSV(RGB/BGR to HSV)

本篇將介紹如何使用 OpenCV 與 Python 來作彩色影像轉HSV(RGB to HSV 或 BGR to HSV),在寫 Python 影像處理程式時常會用到 OpenCV cvtColor 作顏色空間轉換的功能,接下來介紹怎麼使用 Python 搭配 OpenCV 模組來進行 RGB/BGR 轉 HSV 彩色轉HSV空間。

HSV簡單介紹分別為:
色相(H):色彩的顏色名稱,如紅色、黃色等。
飽和度(S):色彩的純度,越高色彩越純,低則逐漸變灰,數值為0-100%。
明度(V):亮度,數值為0-100%。

範例. 彩色影像轉HSV

以下範例 ShengYu 是將 fruits.jpg 來作圖片轉HSV示範,
將影像用 imread 讀進來後,再使用 cvtColor 將影像從彩色轉換成HSV。

使用 cv2.cvtColor 轉換顏色空間時,第二個參數與HSV相關的有:
cv2.COLOR_BGR2HSV
cv2.COLOR_HSV2BGR
cv2.COLOR_RGB2HSV
cv2.COLOR_HSV2RGB
opencv 預設的排列方式為BGR,而不是RGB唷!
所以這邊使用的是 cv2.COLOR_BGR2HSV

詳細程式碼如下:

opencv-rgb-to-hsv.py
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2

image = cv2.imread('fruits.jpg')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow('Input', image)
cv2.imshow('Result', hsv)
cv2.waitKey(0)

結果如下圖所示,

cv2.cvtColor 參數的詳細細節請參考這裡

當然實際上使用時不會只是單純RGB轉換成HSV就結束了,通常會去針對HSV顏色區間去作後續的處理,請看下面的範例。

範例. 物件偵測 - 找出綠色的物體

彩色轉HSV常見的應用可能有物件偵測,去背處理(排除綠色的背景),
以下就來示範如何找出圖片中綠色的水果,類似的應用可能有找出草地的背景,
詳細程式碼如下:

opencv-rgb-to-hsv2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np

image = cv2.imread('fruits.jpg')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
mask = cv2.inRange(hsv, lower_green, upper_green)
res = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow('Input', image)
cv2.imshow('Result', res)
cv2.waitKey(0)

結果如下圖所示:

更多影像處理的例子與應用以後再來寫吧!

參考
Changing Colorspaces — OpenCV-Python Tutorials 1 documentation
https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html#converting-colorspaces
python opencv入门 颜色空间转换(9)Python@fei-CSDN博客
https://blog.csdn.net/tengfei461807914/article/details/75910606
Python-OpenCV顏色空間轉換 - IT閱讀
https://www.itread01.com/p/520326.html

其它相關文章推薦
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV resize 圖片縮放
小專案 Python OpenCV 圖片轉字元圖畫

Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)

本篇將介紹如何使用 OpenCV 與 Python 來作彩色影像轉灰階(RGB to GRAY 或 BGR to GRAY),在寫 Python 影像處理程式時常會用到 OpenCV cvtColor 作顏色空間轉換的功能,接下來介紹怎麼使用 Python 搭配 OpenCV 模組來進行 RGB/BGR 轉 GRAY 彩色轉灰階grayscale。

Python OpenCV RGB/BGR to GRAY 彩色轉灰階使用範例

以下範例 ShengYu 是將 lena.jpg 來作圖片轉灰階示範,彩色轉灰階grayscale的常用方式有兩種:
方法一:將影像用 cv2.imread 讀進來,再將影像從彩色轉換成灰階。
方法二:將影像用 cv2.imread 讀取進來時順便轉換成灰階。

使用 cv2.cvtColor 轉換顏色空間時,第二個參數與灰階相關的有:
cv2.COLOR_BGR2GRAY
cv2.COLOR_GRAY2BGR
cv2.COLOR_RGB2GRAY
cv2.COLOR_GRAY2RGB
opencv 預設的排列方式為BGR,而不是RGB唷!
所以這邊使用的是 cv2.COLOR_BGR2GRAY

使用 cv2.imread 讀取圖片時,第二個參數可以指定圖片的格式,分別為:
cv2.IMREAD_UNCHANGED
cv2.IMREAD_COLOR
cv2.IMREAD_GRAYSCALE

詳細程式碼如下:

opencv-rgb-to-gray.py
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2

# method 1
image = cv2.imread('lena.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# method 2
#image = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Result', image)
cv2.waitKey(0)

結果如下圖所示:

cv2.cvtColor 參數的詳細細節請參考這裡
cv2.imread 參數的詳細細節請參考這裡

參考
[1] Python OpenCV | cv2.imread() method - GeeksforGeeks
https://www.geeksforgeeks.org/python-opencv-cv2-imread-method/
[2] Python 與 OpenCV 基本讀取、顯示與儲存圖片教學 - G. T. Wang
https://blog.gtwang.org/programming/opencv-basic-image-read-and-write-tutorial/
[3] [Python + OpenCV] 彩色轉灰階(RGB to Gray) @ K_程式人 :: 痞客邦 ::
https://jennaweng0621.pixnet.net/blog/post/403254017

其它相關文章推薦
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV resize 圖片縮放
小專案 Python OpenCV 圖片轉字元圖畫

Python OpenCV 影像邊緣偵測 Canny Edge Detection

本篇將介紹如何使用 OpenCV 與 Python 來作影像邊緣偵測 Canny Edge Detection,在寫 Python 影像處理程式時常會用到 OpenCV 邊緣偵測 Canny 的功能,接下來介紹怎麼使用 Python 搭配 OpenCV 模組來進行影像的邊緣偵測 Canny Edge Detection。

Python OpenCV Canny 影像邊緣偵測使用範例

在作邊緣偵測時,通常會先做平滑化(cv2.GaussianBlur)來降低雜訊,,再做 cv2.Canny 跟 cv2.GaussianBlur 前需要先將影像轉為灰階,最後依據結果調整平滑/模糊參數(cv2.GaussianBlur)或邊緣檢測參數(cv2.Canny)來達到想要的結果,整體步驟大約分成這幾步:

  1. 影像轉灰階: cv2.cvtColor
    將影像轉成灰階,也可以在 imread 時就指定讀取為灰階影像

  2. 影像去雜訊/平滑影像: cv2.GaussianBlur
    cv2.GaussianBlur 第二個參數是指定 Gaussian kernel size,本範例使用 5×5 大小

  3. 邊緣偵測: cv2.Canny
    採用雙門檻值
    第二個參數是指定最小門檻值 threshold1 – first threshold for the hysteresis procedure.
    第三個參數是指定最大門檻值 threshold2 – second threshold for the hysteresis procedure.

cv2.Canny 詳細程式碼如下:

opencv-canny.py
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2

image = cv2.imread('lena.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
canny = cv2.Canny(blurred, 30, 150)

cv2.imshow('Input', image)
cv2.imshow('Result', canny)
cv2.waitKey(0)

結果如下圖所示,

這次我們把圖片換成 building.jpg,並且把沒有經過平滑的 Canny 結果與有經過平滑的 Canny 結果都顯示出來,

opencv-canny2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

image = cv2.imread('building.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
canny = cv2.Canny(gray, 30, 150)

blurred = cv2.GaussianBlur(gray, (5, 5), 0)
canny_blurred = cv2.Canny(blurred, 30, 150)

plt.subplot(221), plt.imshow(image), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(canny, cmap='gray'), plt.title('Canny')
plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(blurred, cmap='gray'), plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(canny_blurred, cmap='gray'), plt.title('Canny Blurred')
plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

換成 building.jpg 結果如下圖所示,

cv2.Canny 參數的詳細細節請參考這裡
cv2.GaussianBlur 參數的詳細細節請參考這裡

以上就是 Python OpenCV 影像邊緣偵測 Canny Edge Detection 介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

參考
[Python+OpenCV] 灰階、模糊、邊緣檢測 | 程式好好玩 - 點部落
https://dotblogs.com.tw/coding4fun/2017/11/09/125723
Canny Edge Detection — OpenCV-Python Tutorials 1 documentation
https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_canny/py_canny.html
邊緣偵測懶人包-Canny演算法 - 天道酬勤 - Medium
https://medium.com/@bob800530/opencv-%E5%AF%A6%E4%BD%9C%E9%82%8A%E7%B7%A3%E5%81%B5%E6%B8%AC-canny%E6%BC%94%E7%AE%97%E6%B3%95-d6e0b92c0aa3
邊緣檢測(Canny - edge detection) @ HBY coding academic :: 痞客邦 ::
http://idiot3838.pixnet.net/blog/post/194161931
OPENCV – Edge detection邊緣偵測 – CH.Tseng
https://chtseng.wordpress.com/2016/12/05/opencv-edge-detection%E9%82%8A%E7%B7%A3%E5%81%B5%E6%B8%AC/
[Python + OpenCV] Canny邊緣偵測 @ K_程式人 :: 痞客邦 ::
https://jennaweng0621.pixnet.net/blog/post/404318621

其它相關文章推薦
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV resize 圖片縮放
小專案 Python OpenCV 圖片轉字元圖畫

Python OpenCV 影像平滑模糊化 blur

本篇 ShengYu 將介紹如何使用 OpenCV 與 Python 來作影像平滑模糊化 blur,在寫 Python 影像處理程式時常會用到 OpenCV cv2.blur 圖片平滑模糊化的功能,接下來介紹怎麼使用 Python 搭配 OpenCV 模組來進行影像平滑模糊化 blur。

影像平滑模糊化是透過使用低通濾波器進行影像卷積來實現的。這對於消除雜訊很有用。實際上使用此濾波器時,它會從影像中去除高頻內容(例如,雜訊,邊緣),也會導致影像邊緣變得模糊(也有其他濾波器不會造成影像邊緣模糊)。OpenCV主要提供四種類型的平滑模糊化技術。
平均濾波 Averaging:使用 opencv 的 cv2.blur 或 cv2.boxFilter
高斯濾波 Gaussian Filtering:使用 opencv 的 cv2.GaussianBlur
中值濾波 Median Filtering:使用 opencv 的 cv2.medianBlur
雙邊濾波 Bilateral Filtering:使用 opencv 的 cv2.bilateralFilter

平均濾波 Averaging

平均濾波是使用 box 濾波器進行影像卷積來完成的。它只是簡單地計算 kernel 裡所有 pixel 的平均值,並將該平均值取代 kernel 中心元素。這是使用 cv2.blur 或 cv2.boxFilter 完成的。

以下範例為平均濾波,kernel 大小為 5x5:

opencv-blur.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('opencv-logo.png')

blur = cv2.blur(img, (5, 5))

plt.subplot(121), plt.imshow(img), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(blur), plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

結果如下圖所示:

cv2.blur 參數的詳細細節請參考這裡

高斯濾波 Gaussian Filtering

這邊我們介紹高斯濾波 Gaussian Filtering,它與平均濾波 Averaging 類似,平均濾波 Averaging 的 kernel 裡的每個 pixel 權重都是1,而高斯濾波給予每個 pixel 不同權重,中心 pixel 的權重最高,越往邊角權重就越低,相較於平均濾波 Averaging 這樣可以讓圖片失真較少,高斯濾波通常去除雜訊也有不錯的效果。

opencv-GaussianBlur.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('opencv-logo.png')

blur = cv2.GaussianBlur(img, (5, 5), 0)

plt.subplot(121), plt.imshow(img), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(blur), plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

結果如下圖所示:

cv2.GaussianBlur 參數的詳細細節請參考這裡

中值濾波 Median Filtering

這邊我們介紹中值濾波 Median Filtering,使用 cv2.medianBlur 就可以計算 kernel 視窗內所有 pixel 的中位數然後取代 kernel 中間的數值,中值濾波 Median Filtering 這個方法對於去除雜訊很有效,我們這邊示範讀取一個有雜訊 opencv logo 的圖片然後做 cv2.medianBlur,kernel 大小為 5,

opencv-medianBlur.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('opencv-logo-noise.png')

blur = cv2.medianBlur(img, 5)

plt.subplot(121), plt.imshow(img), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(blur), plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

結果如下圖所示:

cv2.medianBlur 參數的詳細細節請參考這裡

雙邊濾波 Bilateral Filtering

TBD

cv2.bilateralFilter 參數的詳細細節請參考這裡

參考
[Python+OpenCV] 灰階、模糊、邊緣檢測 | 程式好好玩 - 點部落
https://dotblogs.com.tw/coding4fun/2017/11/09/125723
OpenCV: Smoothing Images
https://docs.opencv.org/4.x/d4/d13/tutorial_py_filtering.html

其它相關文章推薦
Python OpenCV cv2.GaussianBlur 高斯濾波
Python OpenCV cv2.medianBlur 中值濾波
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV resize 圖片縮放

Python OpenCV 影像二值化 Image Thresholding

本篇介紹 Python OpenCV 的 cv2.threshold 來作影像二值化 Image Thresholding,在寫 Python 影像處理程式時常會用到 OpenCV cv2.threshold 門檻二值化的功能,接下來介紹怎麼使用 Python 搭配 OpenCV 模組來進行影像二值化 Image Thresholding。

範例. 簡單的二值化

影像二值化簡單的方法,如果像素值pixel大於門檻值threshold,就指定一個新數值(例如白色),否則就指定另一個新數值(例如黑色),
這邊使用 opencv 的 cv2.threshold,第一個參數來源需要是灰階影像,第二個參數是用來對像素值進行分類的門檻值,第三個參數為最大灰階值,第四個參數為二值化的類型如下所示:
cv2.THRESH_BINARY:Threshold Binary,即二值化,將大於門檻值的灰階值設為最大灰階值,小於門檻值的值設為0。
cv2.THRESH_BINARY_INV:Threshold Binary, Inverted,將大於門檻值的灰階值設為0,其他值設為最大灰階值。
cv2.THRESH_TRUNC:Truncate,將大於門檻值的灰階值設為門檻值,小於門檻值的值保持不變。
cv2.THRESH_TOZERO:Threshold to Zero,將小於門檻值的灰階值設為0,大於門檻值的值保持不變。
cv2.THRESH_TOZERO_INV:Threshold to Zero, Inverted,將大於門檻值的灰階值設為0,小於門檻值的值保持不變。
這部份可以參考這張圖 https://docs.opencv.org/2.4/_images/threshold.png

回傳值有兩個,第一個為回傳,第二個為回傳的已二值化的影像。

以下展示這五種二值化類型的結果,詳細程式碼如下:

opencv-threshold.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('gradient.png', 0)
ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
ret, th2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
ret, th3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
ret, th4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
ret, th5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, th1, th2, th3, th4, th5]

for i in range(6):
plt.subplot(2, 3, i+1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()

結果如下圖所示:

cv2.threshold 參數的詳細細節請參考這裡

範例. 自適應二值化

opencv-adaptiveThreshold.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('sudoku.png', 0)
img = cv2.medianBlur(img, 5)

ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH_BINARY, 11, 2)
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv2.THRESH_BINARY, 11, 2)

titles = ['Original Image', 'Global Thresholding (v = 127)',
'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]

for i in range(4):
plt.subplot(2, 2, i+1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()

結果如下圖所示:

cv2.adaptiveThreshold 參數的詳細細節請參考這裡

參考
Image Thresholding — OpenCV-Python Tutorials 1 documentation
https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html#thresholding
OpenCV: Image Thresholding
https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html
Python下opencv使用笔记(四)(图像的阈值处理)Python我爱智能-CSDN博客
https://blog.csdn.net/on2way/article/details/46812121

其它相關文章推薦
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV resize 圖片縮放
小專案 Python OpenCV 圖片轉字元圖畫

Linux tail 持續監看檔案輸出用法與範例

本篇將介紹 Linux tail 用法與範例,Linux tail 指令可以輸出檔案內容的最後幾行或持續監看檔案輸出,接下來看看 tail 指令的一些用法用法與範例吧。

Linux tail 用法範例

tail 指令會讀取檔案的所有內容並將檔案內容最後部份作為標準輸出,預設輸出10行。
-f: 循環讀取,持續監看最新追加的內容,常用於查閱正在改變的日誌文件。

tail 指令監看持續成長的紀錄檔,這樣的指令組合相當於 dmesg。

1
tail -f /var/log/syslog

tail 指令列出 file.txt 的內容最後面幾行(預設10行),

1
tail file.txt

tail 指令列出 file.txt 的內容最後面 5 行,

1
tail -n 5 file.txt

tail 指令列出副檔名 .txt 的內容最後面 3 行,

1
tail -n 3 *.txt

以上就是 Linux tail 用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

參考
tail 顯示每個檔案的最後幾行內容 @ Altohorn-linux :: 隨意窩 Xuite日誌
https://blog.xuite.net/altohorn/linux/17259888
tail命令_Linux tail 命令用法詳解:在屏幕上顯示指定文件的末尾若干行
https://man.linuxde.net/tail
Linux tail 命令 | 菜鳥教程
https://www.runoob.com/linux/linux-comm-tail.html

其它相關文章推薦
Linux 常用指令教學懶人包
Linux cut 字串處理用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數列表轉換用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例
Linux wget 下載檔案用法與範例

Linux xargs 參數列表轉換用法與範例

本篇將介紹如何使用 Linux 下的 xargs 參數列表轉換,以避免參數列表過長的問題,並簡單介紹 xargs 用法與範例。
xargs 使用上一個指令的執行結果作為下個指令的參數,Linux 指令可以管線(pipe)執行,就是在兩個指令之間使用 | 符號,就會將前面指令的輸出結果管線(pipe)作為後面指令的參數,
但如果這中間的輸出結果有包含空白這種特殊字元的話,因為參數預設以空白為分隔,那這樣結果就會出錯,這時候就要用到 xargs 來解決這類型問題。

範例

尋找副檔名 .jpg 檔案在透過 xargs 導給 mv 作搬移,
第二種是找到檔案路徑有包含空白的話可以透過 -print0-0 的參數搭配,

1
2
3
find ./ -name "*.jpg" | xargs mv out/
or
find ./ -name "*.jpg" -print0 | xargs -0 mv out/

尋找副檔名 .jpg 檔案在透過 xargs 導給 rm 作刪除,
第二種是找到檔案路徑有包含空白的話可以透過 -print0-0 的參數搭配,

1
2
3
find ./ -name "*.jpg" | xargs rm -f
or
find ./ -name "*.jpg" -print0 | xargs -0 rm -f

尋找副檔名 .jpg 檔案在透過 xargs 導給 rm 作複製,
第二種是找到檔案路徑有包含空白的話可以透過 -print0-0 的參數搭配,

1
2
3
find ./ -name "*.jpg" | xargs cp out/
or
find ./ -name "*.jpg"-print0 | xargs -0 cp out/

尋找副檔名 .jpg 檔案在透過 xargs 導給 ls 看檔案資訊,

1
find ./ -name "*.jpg" | xargs ls -al

參考
Linux 系統 xargs 指令範例與教學 - G. T. Wang
https://blog.gtwang.org/linux/xargs-command-examples-in-linux-unix/
Linux xargs 命令 | 菜鸟教程
https://www.runoob.com/linux/linux-comm-xargs.html
Ubuntu Linux 用 xargs 指令處理大量檔案
https://www.arthurtoday.com/2015/03/ubunut-linux-xargs-command-examples.html
xargs - 維基百科,自由的百科全書
https://zh.wikipedia.org/wiki/Xargs

其它相關文章推薦
Linux 常用指令教學懶人包
Linux cut 字串處理用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例
Linux wget 下載檔案用法與範例

Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例

本篇將介紹如何使用 Linux 下的 tee 指令來同時螢幕標準輸出和輸出到檔案,透過學習 tee 指令技巧將可以提昇 linux 指令到另一個層次,更能用高效率的指令處理,以下簡單介紹 tee 用法與範例。

範例

以下示範在 linux 下使用 tee 指令的情境,
假設需要搜尋當前目錄下的 *.jpg 的檔案,

將結果從螢幕標準輸出stdout導到檔案,

1
find ./ -name "*.jpg" > out.txt

將結果從透過tee標準輸出在螢幕上也同時輸出到檔案(覆蓋模式),

1
find ./ -name "*.jpg" | tee out.txt

將結果從透過tee標準輸出在螢幕上也同時輸出到檔案(-a 是添加模式,append的意思),

1
find ./ -name "*.jpg" | tee -a out.txt

再透過 pipeline 作後續其他處理,例如 grep 或 ag,

1
2
3
find ./ -name "*.jpg" | tee out.txt | grep photo
or
find ./ -name "*.jpg" | tee out.txt | ag photo

將標準輸出stdout與錯誤輸出stderr都導到檔案,

1
find ./ -name "*.jpg" 2>&1 | tee out.txt

參考
[Linux] tee 指令:將結果同時輸出到螢幕和檔案 – OneJar 的隧道
https://www.onejar99.com/linux-command-tee/

其它相關文章推薦
Linux 常用指令教學懶人包
Linux cut 字串處理用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux xargs 參數列表轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例
Linux wget 下載檔案用法與範例

Python 取得檔案大小 getsize

本篇介紹 Python 中取得檔案大小 os.path.getsize 的用法與範例。
以下範例是在 Python 3 環境下測試過。

使用範例

在 Python 中要取得檔案大小可用 os.path.getsize()
getsize 會返回檔案大小,單位為bytes,如果檔案不存在就返回錯誤,
使用 os.path.getsize 時,需先 import os

程式碼如下:

python-os-path-getsize.py
1
2
3
4
5
6
7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os

path = 'file.txt'
size = os.path.getsize(path)
print('%s = %d bytes' % (path, size))

輸出結果如下:

1
file.txt = 383 bytes

範例2

使用 getsize 如果不想要前面加 os.path 這麼長的的話,可以用下面這種寫法:

1
2
3
4
5
6
7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from os.path import getsize

path = 'file.txt'
size = getsize(path)
print('%s = %d bytes' % (path, size))

參考
Python os.path() 模块 | 菜鸟教程
https://www.runoob.com/python/python-os-path.html
Python | os.path.size() method - GeeksforGeeks
https://www.geeksforgeeks.org/python-os-path-size-method/
os.path.getsize — Common pathname manipulations — Python 3 documentation
https://docs.python.org/3/library/os.path.html#os.path.getsize

其它相關文章推薦
Python 判斷檢查檔案是否存在 os.path.isfile
Python 判斷資料夾是否存在 os.path.isdir
Python 判斷檢查路徑是否存在 exists
Python 去除空白與去除特殊字元 strip
Python 取出檔案名稱 basename
Python 取出目錄的路徑 dirname
Python 字串分割 split
Python 連接字串 join
Python 去除空白與去除特殊字元 strip