[opencv2]: 이미지 요소의 반복

1579 단어 opencv
말을 많이 하면 도움이 되지 않으니 먼저 코드를 붙이고 해석을 보아라.
함수의 기능은 이미지 색상의 축소를 실현하는 것이다.
4
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace std;
using namespace cv;

void colorReduce(Mat &src,Mat &dst, int div = 64);
//  :   div      ,              ,        div   
int main(){
	
	Mat source = imread("1.jpg",1);
	Mat reduceColor(source.size(), source.channels());

	colorReduce(source, reduceColor);
	imshow("source", source);
	imshow("reducecolor", reduceColor);
	waitKey(0);
}
void colorReduce(Mat &src, Mat &dst,int div){
	src.copyTo(dst);	
	int nline = dst.rows;
	int nchannel = dst.cols*dst.channels();// opencv      BGR     ,             
	for (int j = 0; j < n1ine; j++)
	{
		uchar* data = dst.ptr<uchar>(j); //        
		for (int i = 0; i < nchannel; i++)
		{
			data[i] = data[i]/div*div + div/2;//      
		}
	}
}
줄마다 주소를 얻는 데 있어서 사실 방법이 비교적 많다.위에는 uchar * data = image를 사용합니다.ptr(j)의 방식으로 그림의 각 줄의 첫 번째 주소를 얻고, 그 다음에 바늘의 연산을 사용하여 각 줄의 모든 요소에 접근합니다.
주소를 가져오는 방법도 다음과 같습니다.
uchar *data = image.data;//전체 그림의 첫 번째 주소 가져오기
data+ = image.step//이 표현식의 의미는 데이터 = 데이터 + 이미지입니다.step;
                                   //image.step는 그림의 줄 폭을 표시합니다. (줄마다 포함된 픽셀 개수)
실제로 Mat 형식에 대해 opencv는 구성원 함수at(int x, int y)를 제공하여 특정한 위치에 접근하는 픽셀 포인트를 제공합니다. 예:
image,at(i,j) = 255;//(i, j) 위치의 픽셀점의 그레이스케일 값을 255로 할당하기;
image.at(i,j)[channel] = 255;//(i, j) 위치의 픽셀점의 어떤 채널의 값을 255로 설정합니다.

좋은 웹페이지 즐겨찾기