簡體   English   中英

如何將兩個圖像與 c 進行比較

[英]How to compare two image with c

我想實現一種能夠使用 OpenCV 3.0.0 的 C api 比較兩個圖像的算法。 圖像由網絡攝像頭捕獲,因此它們具有相同的分辨率(不要擔心很小)和相同的文件格式(jpeg)(但我們可以根據需要更改它)我的想法是獲取兩張圖像,以黑白和用一個簡單的 for 構造逐位比較。 在 b&w 中,我們可以將圖像視為具有 0 和 1 的完整矩陣。 例子:

Image1(黑白)

  • 0 0 0 1
  • 0 1 0 1
  • 0 0 0 0
  • 0 0 1 1

所以我知道用 opencv 有很多方法可以做到這一點,但我讀了很多對我沒用的例子。 所以我的想法是手動操作每個像素。 將圖像視為一個矩陣,我們可以用一個簡單的雙精度結構來逐個像素地比較 (pixel_image[r:rows][c:columns] == pixel_image2[r:rows][c:columns] 只有當“像素”是被認為是 integer。所以問題是如何從 IplImage 類型中訪問像素值?
當然,通過這種方式,我認為我對代碼的優化很糟糕,或者我無法使其適應大規模的圖像數據。

(請不要回答我:“使用 c++ - 使用 python - c 已棄用 ecc..”,我知道有很多簡單的方法可以用高級別的方法做到這一點)

謝謝大家。

好的,我解決了。 這樣你就可以訪問單個像素的值(如果圖像加載為 RGB)(請記住 opencv 見 BGR)

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
double tmpb,tmpg,bmpr;
for(int i=0;i<img->height;i++){
    for(int j=0;j<img->width;j++){
        tmpb=cvGet2D(img,i,j).val[0];
        tmpg=cvGet2D(img,i,j).val[1];
        tmpr=cvGet2D(img,i,j).val[2];
    }
}

如果圖像是單通道(例如,如果我們將其轉換為黑白)是

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
int tmp 
for(int i=0;i<img->height;i++){
    for(int j=0;j<img->width;j++){
        tmp=cvGet2D(img,i,j).val[0];
        printf("Value: %d",tmp);
    }
}

暫無
暫無

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

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