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

fanfuhan OpenCV 教學020 ~ opencv-020-圖像直方圖反向投影 [用區域顏色圖片 進行圖片前景/背景 標記/分割 ~ back Projection(背景投影)] –

fanfuhan OpenCV 教學020 ~ opencv-020-圖像直方圖反向投影 [用區域顏色圖片 進行圖片前景/背景 標記/分割 ~ back Projection(背景投影)]


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

https://fanfuhan.github.io/2019/03/30/opencv-020/

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


C++

#include 
#include 

using namespace std;
using namespace cv;

void backProjection_demo(Mat &mat, Mat &model);

/*
 * 图像直方图反向投影
 */
int main() {
    Mat src = imread("../images/target.png");
    Mat model = imread("../images/sample.png");
    if (src.empty() || model.empty()) {
        cout << "could not load image.." << endl;
    }
    namedWindow("model", WINDOW_NORMAL);
    imshow("input", src);
    imshow("model", model);

    backProjection_demo(src, model);

    waitKey(0);
    return 0;
}

void backProjection_demo(Mat &image, Mat &model) {
    Mat image_hsv, model_hsv;
    cvtColor(image, image_hsv, COLOR_BGR2HSV);
    cvtColor(model, model_hsv, COLOR_BGR2HSV);

    // 定义直方图参数与属性
    int h_bins = 32, s_bins = 32;
    int histSize[] = {h_bins, s_bins};
    float h_ranges[] = {0, 180}, s_ranges[] = {0, 256};
    const float* ranges[] = {h_ranges, s_ranges};
    int channels[] = {0, 1};

    Mat roiHist;
    calcHist(&model_hsv, 1, channels, Mat(), roiHist, 2, histSize, ranges);
    normalize(roiHist, roiHist, 0, 255, NORM_MINMAX, -1, Mat());
    MatND backproj;
    calcBackProject(&image_hsv, 1, channels, roiHist, backproj, ranges);
    imshow("BackProj", backproj);
}

Python

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


def back_projection_demo():
    sample = cv.imread("D:/javaopencv/sample.png")
    # hist2d_demo(sample)
    target = cv.imread("D:/javaopencv/target.png")
    # hist2d_demo(target)
    roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV)
    target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV)

    # show images
    cv.imshow("sample", sample)
    cv.imshow("target", target)

    roiHist = cv.calcHist([roi_hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])
    cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX)
    dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1)
    cv.imshow("backProjectionDemo", dst)


def hist2d_demo(image):
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
    hist = cv.calcHist([hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])
    dst = cv.resize(hist, (400, 400))
    cv.imshow("image", image)
    cv.imshow("hist", dst)
    plt.imshow(hist, interpolation='nearest')
    plt.title("2D Histogram")
    plt.show()


back_projection_demo()
cv.waitKey(0)

cv.destroyAllWindows()



熱門推薦

本文由 jashliaoeuwordpress 提供 原文連結

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