2016-08-04 5 views
0

Renderscript에 내장 된 colormatrix 내장 함수를 사용하여 세피아 필터를 적용했지만 황색 계통 (세피아)이 아닌 전체 이미지를 녹색으로 바꿉니다. 이 스레드의 대답은 테스트를위한 현재의 기초입니다 (http://answers.opencv.org/question/99510/opencv4android-31-mat-to-allocation-renderscript/). 내가하려고 할 때 때문에 나는, 할당 과정에 매트이 복잡한 비트 맵의 ​​오류를 제외Renderscript를 통해 세피아 적용 ScriptIntrinsicColorMatrix는 이미지를 녹색 음영으로 바꿉니다.

Element element = Element.RGBA_8888(mRS); 
ScriptIntrinsicColorMatrix colorMatrix = ScriptIntrinsicColorMatrix.create(mRS, element); 
final Matrix4f mSepia = new Matrix4f(new float[]{ 
       0.189f, 0.769f, 0.393f, 0f, 
       0.168f, 0.686f, 0.349f, 0f, 
       0.131f, 0.534f, 0.272f, 0f, 
       0.000f, 0.000f, 0.000f, 1f}); 
colorMatrix.setColorMatrix(mSepia); 
colorMatrix.forEach(inputAllocation, outputAllocation); 

: 비트 맵은 다음과 같은 내장 함수는 작업을 수행 곳 renderscript 상에 할당으로 다음 OpenCV의 매트로 전환 및 전달 Bitmap에 내장 된 intrinsic을 몇 주 후에 직접 실행하면 똑같은 green-tint 문제가 발생합니다.

나는 그것이 내가주는 매트릭스로 곱해진 벡터 (R, G, B, A)가되어야한다고 생각하지만, 비꼬는 뭔가가 반드시 그 과정에서 일어나야 만합니다.

여기에 무슨 일이 일어나는지 아는 사람이 있습니까?

+0

소스 파일이나 카메라에서 비트 맵을 교체해야합니까? 카메라가 YUV 형식의 데이터가 아니어야합니까? –

+0

파일의 비트 맵에서 가져옵니다. 이 주일 전에 OpenCV Mat rgba를 비트 맵 argb_8888로 변환하여 같은 문제가 발생했습니다. – AllBecomesGood

+0

업데이트 : Camerafeed에서 직접 스트리밍하고 Renderscript가 YUV에서 RGB로 변환 한 다음 컬러 매트릭스를 적용하고 화면에 표시하기 위해 비트 맵으로 변환 할 때 동일한 이상한 녹색 색조를 얻습니다. Bitmap이 의심 스럽습니다. Pixels을 저장하는 방식이 달라서 별난 일이 생길 수도 있습니다. – AllBecomesGood

답변

0

OpenCV의 저장 B-G-R 형식이 아닌 R-G-B를 사용하여 이미지, 그래서 아마 당신은 단지 B와 R 채널 :

+0

이것이 쉬운 경우에만! 그래도 제안에 감사드립니다! :) – AllBecomesGood

+0

나는 그것을 시도했다, 그것은 일반적으로 과소 평가 된 문제이다. – cmaster11