2017-12-07 1 views
0

그레이 스케일 이미지를 Hsv 이미지로 변환하려하지만 S 및 V 채널을 사전 설정된 값으로 설정하려고합니다. 다음 코드는 작동하지만 ~ 400ms가 걸립니다.Emgu CV - 그레이 스케일 이미지를 단일 Bgr 이미지로 결합

public void ToHueImage(this Image<Gray, double> image, Image<Hsv, double> output) 
{ 
     for (int i = 0; i < image.Width; i++) 
     { 
      for (int j = 0; j < image.Height; j++) 
      { 
       output.Data[j, i, 0] = image.Data[j, i, 0]; 
       output.Data[j, i, 1] = 255; 
       output.Data[j, i, 2] = 255; 
      } 
     }   
    } 
} 
I가 개별적 걸쳐

의 라인을 따라 무언가를 화소를 복사 방지하기 위해 한 번의 조작으로 H, S, 및 V 평면의 각각에 단일 회색조 이미지 채널을 할당 할 수 있도록하고자

public void ToHueImage(this Image<Gray, double> image, Image<Hsv, double>  output) 
{ 
    output.Data.H = image; 
    output.Data.S = WHITE_IMAGE; // These are static 
    output.Data.V = WHITE_IMAGE; // These are static    
} 

바이트 복사 등을하지 않고도 ~ 30ms 정도의 실행 시간을 얻으려고합니다. 이 작업을 수행하는 간단한 방법이 있습니까? 미키에

+1

왜 당신이 (당신의 회색 이미지, 흰색 이미지, 흰색 이미지)와'이력서 :: merge'를 사용하지 않는? – Miki

+0

그게 정확히 내가 원하는 것입니다. - 그냥'CvInvoke.Merge (새로운 VectorOfMat (new VectorOfMat (image.Mat, whiteImage.Mat, whiteImage.Mat), heatMap.Mat); – TheMachinist

+0

Ps 대답을 설정하고 닫을 게요 ;-) – TheMachinist

답변

0

정렬 감사 : 단지 CVInvoke 사용 OpenCV의 기능 병합을 호출해야합니다 :

CvInvoke.Merge(new VectorOfMat(image.Mat, whiteImage.Mat, whiteImage.Mat), heatMap.Mat); 
관련 문제