簡體   English   中英

如何通過memcmp比較兩張圖像,其中一張進行x軸翻轉

[英]How to compare two images by memcmp which one do x-axis flip

我正在用 C++ 編寫一個圖像處理應用程序,需要比較圖像。 例如,我有兩個數組,如下所示:

int image1[] = {10, 20, 30, 40};
int image2[] = {40, 30, 20, 10};

我想找到一種比for循環(如 memcmp)更有效的比較方法。

根據您的問題,不清楚您是要比較兩個圖像/整數數組的相等性,還是要檢查其中一個是否是另一個的翻轉版本。

在任何情況下,您都應該避免過度優化和使用memcmp函數。 從復雜性的角度來看,與for循環沒有區別:將優化留給您的編譯器,讓您的代碼易於閱讀和維護!

要檢查一個數組是否是另一個數組的翻轉版本,您可以使用以下代碼:

int image1[] = {10, 20, 30, 40};
int image2[] = {40, 30, 20, 10};
int len = 4;
bool equal = true;
for (int i = 0; i<len; i++) {
    if (image1[i] != image2[len-i-1]) {
        equal = false;
        break;
    }
}

您可以做的另一件事是將圖像散列與圖像一起存儲並僅比較圖像散列。 但它有一些缺點:

  1. 如果您僅將圖像用於比較一次,則不會節省時間,因為散列需要讀取整個數組,就像直接比較一樣。
  2. 散列不能 100% 保證你平等,因為存在固有的沖突。 它們的數量取決於所使用的散列函數的質量。
  3. 要對翻轉圖像使用散列,您還需要生成圖像翻轉版本的散列並將其用於比較。

您需要從某個地方獲取大小,然后您可以memcmp它們:

size_t size = 4;
int image1[] = {10, 20, 30, 40};
int image2[] = {40, 30, 20, 10};
if(!memcmp(image1, image2, sizeof(int) * size))
  //equal

不過請注意,在這種情況下,填充可能會毀了您的一天

暫無
暫無

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

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