2014-12-23 5 views
1

OpenCV C++에서 이미지 색상 필터링을하고 있습니다. 내 자신의 매트릭스를 사용하여 이미지를 필터링하고 싶습니다. 이 코드를 참조하십시오 :OpenCV는 내 자신의 필터를 컬러 이미지에 적용합니다.

img= "c:/Test/tes.jpg"; 
Mat im = imread(img); 

그리고 내가 필터링하려는를/(이 행렬은 또 다른 매트릭스 3 × 3으로 대체 가능)

Mat filter = (Mat_<double>(3, 3) <<17.8824, 43.5161, 4.11935, 
            3.45565, 27.1554, 3.86714, 
            0.0299566, 0.184309, 1.46709); 

어떻게 내 자신의 매트릭스로 img 매트 행렬을 곱하여 내 행렬 곱셈 ? 나는 여전히 3 행렬 (RGB) 행렬에 다른 행렬 (단일 채널)을 곱하는 방법을 이해하지 못하고 새로운 색상으로 이미지를 생성합니다.

답변

2

opencv documentation을 살펴 봐야합니다.

filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT) 

코드에서 당신이 뭔가를 줄 것이다 : 당신은이 기능을 사용할 수있는 3 채널 행렬에 대한 질문에 대해

Mat output; 
filter2D(im, output, -1, filter); 

을; 문서에 명시되어 있습니다.

kernel – convolution kernel (or rather a correlation kernel), a single-channel floating point matrix; if you want to apply different kernels to different channels, split the image into separate color planes using split() and process them individually. 

기본적으로 "필터"매트릭스는 각 색상 평면에 동일하게 적용됩니다.

당신은 OpenCV의 사이트에 완전한 기능의 예를 찾을 수편집 : 당신의 대답에 대한 http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.html

+0

감사합니다,하지만 난 우리가 R, G에서 모든 단일 픽셀을 받아야합니다 that.First를 해결하기 위해 매트랩의 알고리즘을 발견했다 (1,1) G, (1,1) B, 다음에 매트 3x1 행렬을 만들고 내 자신의 행렬을 곱해서 (행, col) (1,1) 새로운 3x1 행렬을 생성합니다. 그리고 나서 새로운 행렬의 모든 원소를 새로운 RGB 행렬 (1,1) R-> 새로운 값, (1,1) B-> 새로운 값 등등에 넣습니다.하지만 나는 그렇지 않습니다. C++에서 그렇게하는 아이디어가 있습니다. –

+0

왜 너 자신을 다시 써 주겠어? opencv를 사용하고 있기 때문에 opencv가 제공하는 함수를 사용하십시오 ... –

+0

는 문제가 해결 되었습니까? 그럼 대답을 받아주세요. –

관련 문제