how_to_scan_images
2012-11-17 21:02
162 查看
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <sstream> using namespace std; using namespace cv; /************************************************************************ * /************************************************************************/ Mat& sanImgEffective(Mat &I, const uchar* const table) { CV_Assert(I.depth() != sizeof(uchar)); int channels = I.channels(); int nRows = I.rows; int nCols = I.cols * channels; if (I.isContinuous()) { nCols = nRows * nCols; nRows = 1; } uchar* p; for (int i = 0; i < nRows; ++i) { p = I.ptr<uchar>(i); for (int j = 0; j < nCols; ++j) { p[j] = table[p[j]]; } } return I; } /************************************************************************ * /************************************************************************/ Mat& sanImgIterator(Mat &I, const uchar* const table) { CV_Assert(I.depth() != sizeof(uchar)); const int channels = I.channels(); switch(channels) { case 1: { MatIterator_<uchar> it, end; for (it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it, ++end) { *it = table[*it]; } break; } case 3: { MatIterator_<Vec3b> it, end; for (it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it, ++end) { (*it)[0] = table[(*it)[0]]; (*it)[1] = table[(*it)[1]]; (*it)[2] = table[(*it)[2]]; } break; } } return I; } /************************************************************************ * /************************************************************************/ Mat& sanImgOnTheFly(Mat &I, const uchar* const table) { CV_Assert(I.depth() != sizeof(uchar)); int channels = I.channels(); int nRows = I.rows; int nCols = I.cols; switch(channels) { case 1: { for (int i = 0; i <nRows; ++i) { for (int j = 0; j < nCols; ++j) { I.at<uchar>(i, j) = table[I.at<uchar>(i, j)]; } } break; } break; case 3: { Mat_<Vec3b> _I = I; for (int i = 0; i <nRows; ++i) { for (int j = 0; j < nCols; ++j) { _I(i, j)[0] = table[_I(i, j)[0]]; _I(i, j)[1] = table[_I(i, j)[1]]; _I(i, j)[2] = table[_I(i, j)[2]]; } } I = _I; break; } } return I; } int main(){ uchar table[256]; int divideWith = 16; for (int i = 0; i < 256; ++i) { table[i] = divideWith * (i / divideWith); } Mat image = imread("tiger.jpg"); Mat result = image.clone(); cout << "Time of reducing color :" << endl; //C operator [] method 1------------------------------------------------------- { double t; t = (double)getTickCount(); cv::Mat clone_i = image.clone(); result = sanImgEffective(image, table); t = 1000*((double)getTickCount() - t)/getTickFrequency(); cout << " C operator [] runs: \n " << t << " milliseconds."<< endl; } //iterator method 2------------------------------------------------------------ { double t; t = (double)getTickCount(); cv::Mat clone_i = image.clone(); result = sanImgIterator(image, table); t = 1000*((double)getTickCount() - t)/getTickFrequency(); cout << " iterator runs: \n " << t << " milliseconds."<< endl; } // on-the-fly method 3-------------------------------------------------------- { double t; t = (double)getTickCount(); cv::Mat clone_i = image.clone(); result = sanImgOnTheFly(image, table); t = 1000*((double)getTickCount() - t)/getTickFrequency(); cout << "on-the-fly address runs: \n " << t << " milliseconds."<< endl; } // lookUpTable method 4-------------------------------------------------------- Mat lookUpTable(1, 256, CV_8U); uchar* p = lookUpTable.data; for( int i = 0; i < 256; ++i) p[i] = table[i]; { double t; t = (double)getTickCount(); LUT(image, lookUpTable, result); t = 1000*((double)getTickCount() - t)/getTickFrequency(); cout << "the LUT f runs: \n " << t << " milliseconds."<< endl; } }
相关文章推荐
- How to scan images, lookup tables and time measurement with OpenCV
- OpenCV例程2 how to scan images
- \tutorial_code\core\how_to_scan_images
- Ubuntu平台下OpenCV官方教程之how_to_scan_images.cpp例程的编译
- OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— How to scan images, lookup tables and time measurement with OpenCV
- OpenCV--How to scan images, lookup tables and time measurement with OpenCV
- 怎样扫描图片how to scan images
- opencv_tutorial 2.2 - How to scan Images,Lookup tables and time measurement with opencv
- How to capture video frames from the camera as images using AV Foundation
- How To Solve Flickering Background Images
- How to merge two images into one using Actionscript
- How to Create Thumbnail Images in C#
- How to upload images with text using iPhone SDK using ASIHttpRequest ?
- How to read images to Symbian bitmap
- How to merge multiple images into one image - Java ImageIO
- How to scan and clean website viruses ?
- Images; How to create an HTTP handler to dynamically resize images and change quality.
- How to install masterpage,pagelayout,CSS,JS and images through Feature
- How to Make Circle Images using CSS
- How to perform Vector Arithmetic of face images