91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV C++版圖像閾值處理技巧

發布時間:2024-08-26 17:49:54 來源:億速云 閱讀:84 作者:小樊 欄目:編程語言

OpenCV是一個開源的計算機視覺庫,它提供了大量的圖像處理功能。在C++中使用OpenCV進行圖像閾值處理時,可以利用其內置的函數來實現多種閾值處理技巧。

  1. 簡單閾值處理:
#include <opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main() {
    Mat src = imread("input.jpg", IMREAD_GRAYSCALE);
    Mat dst;

    double threshold_value = 128;
    double max_value = 255;
    int threshold_type = THRESH_BINARY;

    threshold(src, dst, threshold_value, max_value, threshold_type);

    imwrite("output.jpg", dst);

    return 0;
}
  1. 自適應閾值處理(Adaptive Thresholding):
#include <opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main() {
    Mat src = imread("input.jpg", IMREAD_GRAYSCALE);
    Mat dst;

    int block_size = 25;
    double constant = 5;
    int threshold_type = THRESH_BINARY;

    adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_MEAN_C, threshold_type, block_size, constant);

    imwrite("output.jpg", dst);

    return 0;
}
  1. Otsu閾值處理:
#include <opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main() {
    Mat src = imread("input.jpg", IMREAD_GRAYSCALE);
    Mat dst;

    double threshold_value = 0;
    double max_value = 255;
    int threshold_type = THRESH_BINARY | THRESH_OTSU;

    threshold(src, dst, threshold_value, max_value, threshold_type);

    imwrite("output.jpg", dst);

    return 0;
}
  1. 雙峰閾值處理(Triangle Thresholding):
#include <opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

double triangleThreshold(Mat& src) {
    int hist[256] = {0};
    for (int i = 0; i < src.rows; i++) {
        for (int j = 0; j < src.cols; j++) {
            hist[src.at<uchar>(i, j)]++;
        }
    }

    int total = src.rows * src.cols;
    int accumulator[256] = {0};
    for (int i = 0; i < 256; i++) {
        accumulator[i] = hist[i] + (i == 0 ? 0 : accumulator[i - 1]);
    }

    double max_dist = 0;
    int threshold = 0;
    for (int i = 0; i < 256; i++) {
        if (accumulator[i] == 0 || accumulator[i] == total) continue;
        double dist = (double)(total - accumulator[i]) * i - (double)accumulator[i] * (255 - i);
        if (dist > max_dist) {
            max_dist = dist;
            threshold = i;
        }
    }

    return threshold;
}

int main() {
    Mat src = imread("input.jpg", IMREAD_GRAYSCALE);
    Mat dst;

    double threshold_value = triangleThreshold(src);
    double max_value = 255;
    int threshold_type = THRESH_BINARY;

    threshold(src, dst, threshold_value, max_value, threshold_type);

    imwrite("output.jpg", dst);

    return 0;
}

這些示例展示了如何在C++中使用OpenCV進行不同類型的圖像閾值處理。你可以根據需要選擇合適的閾值處理技巧。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

含山县| 绵竹市| 监利县| 台东县| 垣曲县| 韩城市| 织金县| 益阳市| 吴桥县| 印江| 婺源县| 探索| 禹州市| 三原县| 衢州市| 祁阳县| 津市市| 南涧| 滦平县| 准格尔旗| 龙口市| 安乡县| 玉山县| 万载县| 盐城市| 克什克腾旗| 将乐县| 新巴尔虎左旗| 阜阳市| 缙云县| 镇雄县| 梓潼县| 博兴县| 石景山区| 兴海县| 古蔺县| 灯塔市| 富顺县| 上犹县| 尼玛县| 阳曲县|