私のアプリケーションの問題は、約 500 個の画像を取得できることですが、2 つの画像のペアのうち 1 つまたは 2 つが完全に同じである可能性があります。これは、ファイルのチェックサムが同じであることを意味します。私の最終的な目標は、どれが繰り返された画像のパリであるかを見つけることです.
しかし、これらの 500 個の画像に圧縮アルゴリズムを適用する必要があります。これは、圧縮されていない画像がディスク領域を占有しすぎるためです。圧縮によってチェックサムが破られるため、圧縮された画像ファイルのチェックサムを使用して、繰り返される画像のペアを特定することはできません。
幸いなことに、私の圧縮アルゴリズムは無損失です。これは、復元された非圧縮画像を何らかの方法でハッシュできることを意味します。しかし、ディスクへの書き込みアクセスをあまり行わずに、これをメモリ内で実行したいだけです。だから私の問題は、メモリ内の多数の画像ファイルから繰り返し画像を効率的に取得する方法ですか?
私はopencvをよく使用しますが、ディスクにファイルを保存せずに効率的である限り、答えは良いでしょう。Python/Bash コードも受け入れられます。C/C++ と OpenCV が推奨されます。
std::hash で OpenCV の Mat を使用することを考えることができますが、 std::hash は直接std::hash<cv::Mat>
動作しません。具体的にコーディングする必要があり、適切に行う方法はまだわかりません。
もちろん、私はこれを行うことができます、
For each 2 images in all my images:
if ((cv::Mat)img1 == (cv::Mat)img2):
print img1 and img2 are identical
しかし、これは非常に非効率的で、基本的に ^4 アルゴリズムです。
私の問題は画像の類似性の問題ではなく、memroy のハッシュの問題であることに注意してください。