![](/img/trans.png)
[英]how to change the intensity of curve colour in Qcustomplot with respect to x-axis?
[英]How to determine pixel intensity with respect to pixel range in x-axis?
如果要获得包含比图像其余部分更多白色的最小连续图像列范围,则需要先计算每列中的白色像素数。 让我们假设我们有一个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.