画像のバイナリ ヒストグラムを保存しました。さまざまな接続コンポーネントにさまざまなレベルのグレーでラベルを付けようとしています。つまり、レベル 255 は残りません。
動作するコードがいくつかあると思いますが、問題は実行に時間がかかりすぎることです。より速い方法があるかどうか、または問題があるかどうか疑問に思っています。
//first pass
int label = 256;
vector<int> states;
int cur, top, left;
for(size_t y = 0; y < original_image.rows; y++){
for(size_t x = 0; x < original_image.cols; x++){
cur = hist3[y*modified_image.cols + x];
if(cur == 255){
top = hist3[(y-1)* modified_image.cols + x];
left = hist3[y*modified_image.cols + x - 1];
if(left > 255 && top <= 255){
cur = left;
} else if(top > 255 && left <= 255){
cur = top;
} else if(top > 255 && left > 255){
if(top < left){
cur = top;
states.push_back(top);
states.push_back(left);
} else if(left < top){
cur = left;
states.push_back(left);
states.push_back(top);
}
} else {
cur = label;
}
hist3[y*modified_image.cols + x] = cur;
} else{
label++;
}
}
}
現在、州では、上と左の間で妥協が必要な領域を 1,2,3,4 として保存し、すべての 2 は 1 で、すべて 4'3 である必要があります。
ここが本当に遅い部分です。うまくいくと思いますが、最高値から始めて作成した状態のリストを調べています。次に、最高値を最低値に変換します。
vector<int> tops;
for(int i = 0; i < states.size(); i++){
tops.push_back(states[i+1]);
}
sort (tops.begin(), tops.begin()+4);
for(int i = tops.size() -1; i > 0; i--){
for(int j = states.size() -1; j > 0; j -= 2){
if(tops[i] == states[j]){
for(int p = 0; p < hist3.size(); p++){
if(hist3[p] == states[j]){
hist3[p] = states[j-1];
}
}
}
}
}
どんな助けにも感謝します!