码迷,mamicode.com
首页 > 移动开发 > 详细

OpenCV.2.Computer.Vision.Application.Programming.Cookbook--Efficient scanning of continuous images

时间:2015-03-10 21:36:15      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

#include<opencv2\opencv.hpp>

void colorReduce(cv::Mat &image, int div=64)
{  
	int nr= image.rows; // number of rows  
	int nc= image.cols * image.channels(); // total number of elements per line  
	if (image.isContinuous())  
	{  
		// then no padded pixels  
		nc= nc*nr;   
		nr= 1;  // it is now a 1D array  
	}  
	int n= static_cast<int>(log(static_cast<double>(div))/log(2.0));  
	// mask used to round the pixel value  
	uchar mask= 0xFF<<n; // e.g. for div=16, mask= 0xF0  
	for (int j=0; j<nr; j++) 
	{  
		uchar* data= image.ptr<uchar>(j);  
		for (int i=0; i<nc; i++) 
		{  
			*data++= *data&mask + div/2;  
		} // end of row                   
	}  
}  

int main(int argc,char* argv[])
{
	cv::Mat pImg;

	pImg=cv::imread("lena.jpg");
	cv::imshow("Image",pImg);

	colorReduce(pImg);

	cv::imshow("pImg",pImg);
	cv::waitKey(0);
	return 0;
}


技术分享

Mat::reshape
在无需复制数据的前提下改变2D矩阵的形状和通道数或其中之一。
C++: Mat Mat::reshape(int cn, int rows=0) const
参数:
cn – 新的通道数。若cn=0,那么通道数就保持不变。
rows –新的行数。 若rows = 0, 那么行数保持不变。

if (image.isContinuous())
	{
		image.reshape(1,image.cols*image.rows);
	}
	int nr= image.rows; // number of rows  
	int nc= image.cols * image.channels(); // total number of elements per line  
和上面一样效果!

OpenCV.2.Computer.Vision.Application.Programming.Cookbook--Efficient scanning of continuous images

标签:

原文地址:http://blog.csdn.net/deram_boy/article/details/44179935

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!