2013-12-11 14 views
1

我正在嘗試更改矩陣中圖像存儲的色相。我有一個使用split()函數的色調通道,但我無法改變它的色調。我正在使用函數集(標量標量)來改變其色調,但我沒有看到圖像中的任何變化。在矩陣中設置圖像存儲的色相

 Mat eyeball_HSV = new Mat(); 
     Mat dest = new Mat();  
     Mat eye = new Mat(); 

     eye = mRgba.submat(eye_template); 

     List<Mat> hsv_channel = new ArrayList<Mat>(); 

      Imgproc.cvtColor(eye, eyeball_HSV, Imgproc.COLOR_RGB2HSV, 0); 

      // get HSV channel 
     //hsv_channel[0] is hue 
     //hsv_channel[1] is saturation 
     //hsv_channel[2] is visibility 
     Core.split(eyeball_HSV, hsv_channel); 

     try 
     { 
      hsv_channel.get(0).setTo(new Scalar(145,25,45)); 
      Log.v(TAG, "Got the Channel!"); 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
      Log.v(TAG, "Didn't get any channel"); 
     } 

     Imgproc.cvtColor(eyeball_HSV, dest, Imgproc.COLOR_HSV2RGB); 
     Imgproc.cvtColor(dest, eye, Imgproc.COLOR_RGB2RGBA); 

回答

0

代碼

hsv_channel.get(0).setTo(new Scalar(145,25,45)); 

只要改變到

hsv_channel.get(0).setTo(new Scalar(145)); // whatever your value 

hsv_channel.get(0)是單信道墊所以你的標量值應該與單。

編輯: -

喲可以看到OpenCV的攝像頭預覽例如here

在Tutorial1Activity.java你可以看到一個方法

public Mat onCameraFrame(CvCameraViewFrame inputFrame) 

添加這種方法這些線路

 src = inputFrame.rgba(); 
     Imgproc.cvtColor(src, hsv,Imgproc.COLOR_RGB2HSV);  
     Core.split(hsv, hsv_channel); 
     // Imgproc.equalizeHist(hsv_channel.get(0), hsv_channel.get(0)); 
     hsv_channel.get(0).setTo(new Scalar(64)); 
     Core.merge(hsv_channel, hsv); 
     Imgproc.cvtColor(hsv, src,Imgproc.COLOR_HSV2RGB);  
     //return hsv_channel.get(0); 
     return src; 
+0

親愛的。 – user2934930

+0

我有一個問題?如果你只想改變圖像的子(選定)部分,就像我的情況一樣,現在我已經檢測到眼睛,我想改變它的顏色。所以我應該將整個圖像更改爲HSV,然後更改所選的矩陣色相,或者我應該只將選定的矩陣更改爲hsv,然後更改其色調。 – user2934930

+0

您可以使用圖像roi並在選定的部分上執行操作,就像您的案例中的眼睛一樣 – Haris