opencv颜色空间缩减
生活随笔
收集整理的這篇文章主要介紹了
opencv颜色空间缩减
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<vector>
#include<opencv2/core/core.hpp>
using namespace std;
using namespace cv;class mat
{
public://顏色空間縮減,在實(shí)際圖像處理中,僅用顏色中具有代表性的很小部分就可以達(dá)到預(yù)期的效果;//顏色空間縮減的做法:把0-9范圍的像素值取為0;10~19范圍的取為1;也就是通過(guò)舍掉//余數(shù)的方式得到較少的像素值。//步驟://1、遍歷圖像的每一個(gè)像素;//2、對(duì)像素應(yīng)用公式:new=10*(old/10);void range(Mat& dst, int num,uchar *table){//判斷是灰度圖還是彩色圖int dims = dst.channels();//遍歷圖像矩陣if (dims == 1){for (int j = 0; j < dst.rows; j++){uchar* image = dst.ptr<uchar>(j);for (int k = 0; k < dst.cols; k++){image[k] = table[image[k]];//圖像大時(shí)這種方法更好//或者image[k] = image[k] / num * num;}}}if (dims == 3){vector<Mat> mv;split(dst, mv);//分離通道for (int j = 0; j < dst.rows; j++){uchar* image0 = mv[0].ptr<uchar>(j);uchar* image1 = mv[1].ptr<uchar>(j);uchar* image2 = mv[2].ptr<uchar>(j);for (int k = 0; k < dst.cols; k++){image0[k] = image0[k] / num * num;image1[k] = image1[k] / num * num;image2[k] = image2[k] / num * num;//或者image[k]=table[image[k]]}}merge(mv, dst);//cout << dst << endl;}}
};int main()
{Mat temp = imread("D:\\VC\\c++\\opencv源碼\\opencv源碼\\122.bmp");Mat src = imread("D:\\VC\\c++\\opencv源碼\\opencv源碼\\12.bmp",IMREAD_GRAYSCALE);cout << "temp.size()=" << temp.size() << "\ttemp.channels()=" << temp.channels() << endl;cout << "result.size()=" << src.size() << "\tresult.channels()=" << src.channels() << endl;Mat dst = src.clone();//定義公式int num = 10;//改變縮減程度uchar table[256];for (int i = 0; i < 256; i++){table[i] = num * (i / num);}mat p;p.range(dst,num,table);imshow("原圖", src);imshow("縮減后的圖", dst);waitKey(0);system("pause");return 0;
}
?
總結(jié)
以上是生活随笔為你收集整理的opencv颜色空间缩减的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: opencv中Range类的使用
- 下一篇: opencv中LUT函数实现颜色空间缩减