search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

fanfuhan OpenCV 教學040 ~ opencv-040-二值化圖像介紹 (彩色轉灰階+憑感覺手動設定threshold值轉二值化圖) – jashliao部落格

fanfuhan OpenCV 教學040 ~ opencv-040-二值圖像介紹 (彩色轉灰階+憑感覺手動設定threshold值轉二值化圖)


資料來源: https://fanfuhan.github.io/

https://fanfuhan.github.io/2019/04/12/opencv-040/

GITHUB:https://github.com/jash-git/fanfuhan_ML_OpenCV


二值圖像就是只有黑白兩種顏色表示的圖像,其中0 – 表示黑色, 1 – 表示白色(255) 。二值圖像處理與分析在機器視覺與機器人視覺中非常重要,涉及到非常多的圖像處理相關的知識,常見的二值圖像分析包括輪廓分析、對象測量、輪廓匹配與識別、形態學處理與分割、各種形狀檢測與擬合、投影與邏輯操作、輪廓特徵提取與編碼等。此外圖像二值化的方法也有很多,OpenCV主要是支持幾種經典的二值化算法。

從編程與代碼角度,OpenCV中二值圖像單通道的、字節類型的Mat對象、對於任意的輸入圖像首先需要把圖像轉換為灰度、然後通過二值化方法轉換為二值圖像。本質上,從灰度到二值圖像,是對數據的二分類分割,所以很多數據處理的方法都可以使用,但是圖像是特殊類型的數據,它有很多限制條件,決定了只有一些合適的方法才會取得比較好的效果。這些算法的最主要的一個任務就是尋找合理的分割閾值T、對於給定任意一個像素點灰度值

P(x, y) > T ? 255 : 0


C++

#include 
#include 

using namespace std;
using namespace cv;

/*
 * 二值图像介绍
 */
int main() {
    Mat src = imread("../images/master.jpg");
    if (src.empty()) {
        cout << "could not load image.." << endl;
    }
    imshow("input", src);

    // 转为灰度图像
    Mat gray, binary;
    cvtColor(src, gray, COLOR_BGR2GRAY);
    int t = 127;
    Scalar m = mean(src);
    int t_mean = m[0];

    // 转二值图像
    binary = Mat::zeros(src.size(), CV_8UC1);
    for (int row = 0; row < src.rows; ++row) {
        for (int col = 0; col < src.cols; ++col) {
            int pv = gray.at(row, col);
            pv > t ? binary.at(row, col) = 255
                    : binary.at(row, col) = 0;
        }
    }

    imshow("binary_t=127", binary);
    //imshow("binary_t=mean", binary);

    waitKey(0);
    return 0;
}

Python

import cv2 as cv
import numpy as np

src = cv.imread("D:/images/master.jpg")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

T = 127

# 转换为灰度图像
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
h, w = gray.shape
T = cv.mean(gray)[0]
print("current threshold value : ", T)

# 二值图像
binary = np.zeros((h, w), dtype=np.uint8)
for row in range(h):
    for col in range(w):
        pv = gray[row, col]
        if pv > T:
            binary[row, col] = 255
        else:
            binary[row, col] = 0
cv.imshow("binary", binary)

cv.waitKey(0)
cv.destroyAllWindows()



熱門推薦

本文由 jashliaoeuwordpress 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦