簡體   English   中英

如何確定x軸像素范圍的像素強度?

[英]How to determine pixel intensity with respect to pixel range in x-axis?

我想看看相對於圖像寬度的顏色分布。 也就是說,如果(黑白)圖像的寬度為720像素,那么我想得出結論:與圖像的其余部分相比,特定范圍(例如像素[500,720])具有更多的白色。 我想的是,我需要一片720x1像素的圖像,然后我需要檢查這些值並將它們分配為寬度為720像素。 但我不知道我能以合適的方式應用它的方式嗎?

編輯:我使用OpenCV 4.0.0和C ++。

示例案例:在第一張圖片中,很明顯右側像素是白色的。 我想獲得這條密集線或區域的估計坐標。 淡粉色區域是我感興趣的地方,紅色邊框是我想要找到它的范圍。

在此輸入圖像描述 在此輸入圖像描述

如果要獲得包含比圖像其余部分更多白色的最小連續圖像列范圍,則需要先計算每列中的白色像素數。 讓我們假設我們有一個720x500(500像素高,720像素寬)的圖像。 比你將獲得一個720個元素的數組Arr ,它們分別與每列(1x500)中的白色像素數相等。

const int Width = img.cols;
int* Arr = new int[Width];
for( int x = 0; x < Width; x++ ) {
    Arr[x] = 0;
    for( int y = 0; y < img.rows; y++ ) {
        if ( img.at<cv::Vec3b>(y,x) == cv::Vec3b(255,255,255) ) {
            Arr[x]++;
        }
    }
}

你需要在這個數組中找到滿足條件Sum(Arr [0到A-1])+ Sum(Arr [B + 1到Width-1])<Sum(Arr [A到A]的最小范圍[A; B] B])。

// minimum range width is guaranteed to be less or equal to (Width/2 + 1)
int bestA = 0, minimumWidth = Width/2 + 1;
int total = RangeSum(Arr, 0, Width-1);
for (int i = 0; i < Width; i++) {
    for (int j = i; j < Width && j < i + minimumWidth; j++) {
        int rangeSum = RangeSum(Arr, i, j);
        if (rangeSum > total - rangeSum) { 
            bestA = i; 
            minimumWidth = j - i + 1; 
            break;
        }
    }
}

std::cout << "Most white minimum range - [" << bestA << ";" << bestA + minimumWidth - 1 << "]\n";

如果你預先計算所有[0;]的總和,你可以優化代碼。 i]范圍,i從0到寬度 - 1.你可以將RangeSum(Arr, A, B)PrecalculatedSums[B] - PrecalculatedSums[A] (在O(1)復雜度中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM