2

現在、ディスクから画像を読み取っています。イメージは、グレー スケール イメージまたはバイナリ イメージです。ただし、画像のヘッダーファイルからはわかりません。私が今やっていることは、ユニークなピクセルの数を伝えることです。一意のピクセル数が 2 を超える場合、画像はグレースケールです。それ以外は白黒画像です。私は仕事をするために次の機能を使用しています:

  bool is_binary_image(  std::vector<unsigned char> &memory)
{
    std::set<unsigned char> myset;
    for(  std::vector<unsigned char>::iterator  it = memory.begin();
        it!= memory.end(); 
        it++)
    {
        myset.insert(*it);
        if (myset.size()>2)
            return false;
    }

    return true;

}

この関数は、候補画像がグレースケール画像の場合にうまく機能します。ただし、候補イメージがバイナリの場合、関数は時間がかかります。機能を改善するためのアイデアはありますか?

4

3 に答える 3

1

画像について何の仮定もせずに、実際にできることはあまりありません (画像全体の反復に関する限り)。最悪の場合、画像内で最後にチェックされたピクセルが 3 番目の値を持っているため、すべてのピクセルをチェックして、グレースケール画像ではないことを確認する必要があります。

とはいえ、あなたのやり方はかなり非効率的です。白黒ピクセルの可能な値がわかっている場合は、単純にピクセルを反復処理して、値が白黒と異なるかどうかを確認できます。これにより、セットが削除され、パフォーマンスが劇的に向上するはずです。

于 2013-07-18T11:23:48.627 に答える