Open Pin-Jiun opened 1 year ago
在電腦中我們儲存的圖片,預設的座標軸(Ix, Iy)都是在「第四象限」! 小畫家的左下角也提供我們快速查詢座標的方式
而處理圖片大多是用matrix(numpy)的方式, 也就是Matrix[m,n]的方式
Ix = n Iy = m
h,w,d = img.shape
參數: path:一個字符串,表示要讀取的圖像的路徑。 flag:指定讀取圖像的方式。它的默認值為cv2.IMREAD_COLOR
返回值:此方法返回從指定文件加載的圖像。
cv2.IMREAD_COLOR:指定加載彩色圖像。圖像的任何透明度都將被忽略。它是默認標誌。或者我們可以為此標誌傳遞整數值1 cv2.IMREAD_GRAYSCALE:指定以灰度模式加載圖像。或者,我們可以為此標誌傳遞整數值0 。 cv2.IMREAD_UNCHANGED:它指定加載圖像,包括 alpha 通道。或者,我們可以為此標誌傳遞整數值-1 。
# 儲存圖片 save image # 第一個參數為圖片路徑(可直接修改副檔名),第二個為圖片 cv2.imwrite('./test_result/out.jpg', result_img)
旋轉圖片 cv2.getRotationMatrix2D
M = cv2.getRotationMatrix2D(center, 15, 1.0)
def rotate_img(img): (h, w, d) = img.shape # 讀取圖片大小 center = (w // 2, h // 2) # 找到圖片中心 # 第一個參數旋轉中心,第二個參數旋轉角度(-順時針/+逆時針),第三個參數縮放比例 M = cv2.getRotationMatrix2D(center, 15, 1.0) # 第三個參數變化後的圖片大小 rotate_img = cv2.warpAffine(img, M, (w, h)) return rotate_img
img1 = cv2.resize(image, (400, 400), interpolation=cv2.INTER_NEAREST)
interpolation 如果是要縮小圖片的話,通常 INTER_AREA 使用效果較佳。 如果是要放大圖片的話,通常 INTER_CUBIC 使用效果較佳,次等則是 INTER_LINEAR。 如果要追求速度的話,通常使用 INTER_NEAREST。
interpolation
1.輸入兩張影像,分別為 image、template
2.不斷滑動 template,得到 image 上各個位置的比較值,比較值代表相似程度 然後將 image 左上角位置,作為 result 比較值的存放位置
3.完成後可得到 result 可用 minMaxLoc() 函式,找出結果圖的最大或最小值,定位出搜尋位置
image 被尋找的圖片 必須為 8-bit or 32-bit
templ 尋找的物品圖片 size 不能大於 image,且格式需一致
method 比對的方法 result 比較的結果,格式為 numpy.ndarray (dtype=float32) 可傳入想儲存結果的 array
限制 物體有旋轉時,會找不到 物體大小改變時,會找不到
其中OpenCV 提供6種方法:
CV_TM_SQDIFF: 將圖片直接與模板相減之平方差,與原始圖片差值最小的位置即為結果,但容易受到光線影響,匹配結果較不穩定
CV_TM_SQDIFF_NORMED: 正規化後的平方差,可以適應原始圖片及模板同時提高亮度的狀況,但只有其中之一的圖片光線調整,依然會產生問題
CV_TM_CCORR:: 相關性係數(correlation),分數越高越相似
CV_TM_CCORR_NORMED: 正規化相關性係數(correlation),分數越高越相似
CV_TM_CCOEFF: 相關性係數,但去除本身圖片亮度,只保留圖片分布,可以適應圖片及模板亮度變化,分數越高越相似
CV_TM_CCOEFF_NORMED: 正規化相關性係數,且除本身圖片亮度,只保留圖片分布,分數越高越相似
ref https://www.wongwonggoods.com/category/all-posts/python/python_opencv/page/4/
圖片的座標
在電腦中我們儲存的圖片,預設的座標軸(Ix, Iy)都是在「第四象限」! 小畫家的左下角也提供我們快速查詢座標的方式
而處理圖片大多是用matrix(numpy)的方式, 也就是Matrix[m,n]的方式
cv2.imread(路徑,標誌)
參數: path:一個字符串,表示要讀取的圖像的路徑。 flag:指定讀取圖像的方式。它的默認值為cv2.IMREAD_COLOR
返回值:此方法返回從指定文件加載的圖像。
cv2.IMREAD_COLOR:指定加載彩色圖像。圖像的任何透明度都將被忽略。它是默認標誌。或者我們可以為此標誌傳遞整數值1 cv2.IMREAD_GRAYSCALE:指定以灰度模式加載圖像。或者,我們可以為此標誌傳遞整數值0 。 cv2.IMREAD_UNCHANGED:它指定加載圖像,包括 alpha 通道。或者,我們可以為此標誌傳遞整數值-1 。
儲存圖片 cv2.imwrite
旋轉圖片 cv2.getRotationMatrix2D
M = cv2.getRotationMatrix2D(center, 15, 1.0)
縮放圖片 cv2.resize
img1 = cv2.resize(image, (400, 400), interpolation=cv2.INTER_NEAREST)
interpolation
如果是要縮小圖片的話,通常 INTER_AREA 使用效果較佳。 如果是要放大圖片的話,通常 INTER_CUBIC 使用效果較佳,次等則是 INTER_LINEAR。 如果要追求速度的話,通常使用 INTER_NEAREST。result = cv2.matchTemplate(image, templ, method[, result])
1.輸入兩張影像,分別為 image、template
2.不斷滑動 template,得到 image 上各個位置的比較值,比較值代表相似程度 然後將 image 左上角位置,作為 result 比較值的存放位置
3.完成後可得到 result 可用 minMaxLoc() 函式,找出結果圖的最大或最小值,定位出搜尋位置
參數
image 被尋找的圖片 必須為 8-bit or 32-bit
templ 尋找的物品圖片 size 不能大於 image,且格式需一致
method 比對的方法 result 比較的結果,格式為 numpy.ndarray (dtype=float32) 可傳入想儲存結果的 array
限制 物體有旋轉時,會找不到 物體大小改變時,會找不到
其中OpenCV 提供6種方法:
CV_TM_SQDIFF: 將圖片直接與模板相減之平方差,與原始圖片差值最小的位置即為結果,但容易受到光線影響,匹配結果較不穩定
CV_TM_SQDIFF_NORMED: 正規化後的平方差,可以適應原始圖片及模板同時提高亮度的狀況,但只有其中之一的圖片光線調整,依然會產生問題
CV_TM_CCORR:: 相關性係數(correlation),分數越高越相似
CV_TM_CCORR_NORMED: 正規化相關性係數(correlation),分數越高越相似
CV_TM_CCOEFF: 相關性係數,但去除本身圖片亮度,只保留圖片分布,可以適應圖片及模板亮度變化,分數越高越相似
CV_TM_CCOEFF_NORMED: 正規化相關性係數,且除本身圖片亮度,只保留圖片分布,分數越高越相似
ref https://www.wongwonggoods.com/category/all-posts/python/python_opencv/page/4/