OpenCV-Java版學習(2.影像入門)

whisperrr發表於2021-08-21

  影像入門

  一.在Java中使用OpenCV注意事項

  1.解決awt報錯問題

  先給大家貼個錯誤,如下圖:

  我們在使用awt處理影像的時候報了這個異常,HeadlessException 異常是在環境中不支援鍵盤、顯示器或滑鼠的環境中呼叫與鍵盤、顯示器或滑鼠有關的程式碼時,被丟擲的異常。

  網上有幾種解決方法,比較方便的一種解決方法如下:

  System.setProperty("java.awt.headless", "false");

  這段程式碼啟用了Headless模式,Headless模式是系統的一種配置模式。在該模式下,系統缺少了顯示裝置、鍵盤或滑鼠。

  這段程式碼相當於告訴程式,現在你要工作在Headless模式下,就不要指望硬體幫忙了,你得自力更生,依靠系統的計算能力模擬出這些特性來。

  2.載入動態庫

  這裡我們在Java中呼叫一下dll就行了,如下:

  URL url = ClassLoader.getSystemResource("lib/opencv/opencv_java451.dll");//這裡的dll根據你自己的實際情況寫

  System.load(url.getPath());

  二.讀取影像和顯示影像

  在OpenCV中我們可以使用imread()函式來進行影像的讀取。影像的工作目錄或影像的完整路徑應給出。

  該函式的定義如下:

  static Mat imread(String filename) 大連無痛人流哪家好  

  static Mat imread(String filename, int flags)

  flags是一個標誌,它表示以何種方式來讀取影像,它有常用的3個值,如下:

  IMREAD_COLOR = 1:載入彩色影像。任何影像的透明度都會被忽視。它是預設標誌;

  IMREAD_GRAYSCALE = 0:以灰度模式載入影像;

  IMREAD_UNCHANGED = -1:載入影像,包括alpha通道。

  當然我們也可以在原始碼中檢視其他的值,如下:

  在OpenCV中我們可以使用imshow()函式來在視窗中顯示影像,視窗自動適應影像的尺寸,該函式使用如下:

  public static void imshow(String winname, Mat img);

  第一個引數是視窗名稱,它是一個字串。第二個引數是我們讀取圖片的物件。

  影像讀取和顯示的程式碼如下:

  import org.junit.jupiter.api.Test;

  import org.opencv.core.Mat;

  import org.springframework.boot.test.context.SpringBootTest;

  import java.net.URL;

  import static org.opencv.highgui.HighGui.*;

  import static org.opencv.imgcodecs.Imgcodecs.imread;

  @SpringBootTest

  class DemoApplicationTests { @Test public void testOpencv1() throws Exception { // 解決awt報錯問題 System.setProperty("java.awt.headless", "false"); // 載入動態庫 URL url = ClassLoader.getSystemResource("lib/opencv/opencv_java451.dll"); System.load(url.getPath()); // 讀取影像,以彩色模式(1)顯示,0是灰度模式,-1是載入影像,包括alpha通道 Mat src = imread("D:\\OpenCV_Study\\demo1\\src\\main\\resources\\image\\test1.jpg",1); if (src.empty()) { throw new Exception("image is empty"); } imshow("image",src); waitKey(0); destroyAllWindows(); }

  }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005147/viewspace-2788140/,如需轉載,請註明出處,否則將追究法律責任。

相關文章