首先認識一下簡單的色彩降低方法(color reduction method),如果使用的是c或c++無符號的char(八字節大小的空間),乙個通道(channel)有256個不同的值(2^8=256),但是如果使用的是grb方案,三個channel的話,顏色的數量就會變為256*256*256,大概是16個million這麼多,這麼多的顏色數量,對於計算機來說仍然是乙個負擔,所以可以想一些方法來降低這些色彩數量。
假定色度範圍為0-255,n選取為64,則色彩數降低為4x4x4;換算公式為data=data/n*n+n/2;data/n獲得色度區間
0-64->0,64-128->1,64-128->1,128-192->2,128-256->3
再乘以n,為0、64、128、192,再加n/2 ,從0-255變為4個色度32、96、160、224,即變為每個範圍內的中值。例項**如下:
#include #include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
void colorreduce(mat& srcimg, mat& dstimg, int n)
} double end = static_cast(gettickcount());
double time = (end - start) / gettickfrequency();
cout << "執行時間為:" << time << "秒" << endl;
imshow("原影象", srcimg);
imshow("閾值處理後影象", dstimg);
waitkey(0);
}void colorreducebypointer0(mat& srcimg, mat& dstimg, int n)
} double end = static_cast(gettickcount());
double time = (end - start) / gettickfrequency();
cout << "執行時間為:" << time << "秒" << endl;
imshow("原影象", srcimg);
imshow("閾值處理後的影象", dstimg);
waitkey(0);
}void colorreducebypointer1(mat& srcimg, mat& dstimg, int n)
} double end = static_cast(gettickcount());
double time = (end - start) / gettickfrequency();
cout << "執行時間為:" << time << "秒" << endl;
imshow("原影象:", srcimg);
imshow("閾值處理後的影象", dstimg);
waitkey(0);
}void colorreducebyinterator0(mat& srcimg, mat& dstimg, int n)
double end = static_cast(gettickcount());
double time = (end - start) / gettickfrequency();
cout << "執行時間為:" << time << "秒" << endl;
imshow("原影象:", srcimg);
imshow("閾值處理後的影象", dstimg);
waitkey(0);
}void colorreducebyinterator1(mat& srcimg, mat& dstimg, int n)
double end = static_cast(gettickcount());
double time = (end - start) / gettickfrequency();
imshow("原影象", srcimg);
imshow("閾值處理後的影象", dstimg);
waitkey(0);
}int main(int argc, char* argv)
opencv學習筆記 hsv顏色空間
1.rgb模型。三維座標 原點到白色頂點的中軸線是灰度線,r g b三分量相等,強度可以由三分量的向量表示。用rgb來理解色彩 深淺 明暗變化 色彩變化 三個座標軸rgb最大分量頂點與黃紫青ymc色頂點的連線 深淺變化 rgb頂點和cmy頂點到原點和白色頂點的中軸線的距離 明暗變化 中軸線的點的位置...
Opencv學習筆記 顏色空間轉換
轉換顏色空間 我們常用的顏色空間轉換就兩種 bgr gray cv2.color bgr2gray 和bgr hsv cv2.color bgr2hsv 用到的函式是 cv2.cvtcolor imput image,flag 其中flag為轉換型別。跟蹤特定顏色的物體例項 我們還需要了解,根據閾值...
OpenCV學習筆記(四) 顏色空間轉換
在opencv中使用cv cvtcolor inputarray src,outputarray dst,int code,int dstcn 0 進行顏色空間的轉換 src和dst分別為輸入影象和輸出影象 code是個掩碼,代表不同的轉換方式 dstcn是輸出影象的通道數,預設0為與輸入影象相同 ...