Java OpenCV利用KNN算法實現(xiàn)圖像背景移除
更新時間:2022年01月28日 14:43:28 作者:深色風信子
這篇文章主要為大家介紹了Java OpenCV利用K最鄰近(KNN,K-NearestNeighbor)分類算法實現(xiàn)圖像背景移除的示例代碼,需要的可以參考一下
實現(xiàn)步驟
1 獲取視頻
2 設置形態(tài)學結構
3 創(chuàng)建 Video.createBackgroundSubtractorKNN()
4 提取模型 BS
5 進行形態(tài)學變換
6 膨脹
7 二值化
8 展示結果
示例代碼
package com.xu.opencv; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfPoint; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Size; import org.opencv.highgui.HighGui; import org.opencv.imgproc.Imgproc; import org.opencv.video.BackgroundSubtractorKNN; import org.opencv.video.Video; import org.opencv.videoio.VideoCapture; /** * @Title: BSM.java * @Package com.xu.opencv * @Description: OpenCV-4.1.0 背景消除 * @author: hyacinth * @date: 2019年7月19日 下午22:10:14 * @version: V-1.0 * @Copyright: 2019 hyacinth */ public class BSM { static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } public static void main(String[] args) { BSM_KNN(); } /** * OpenCV-4.1.0 視頻分析和對象跟蹤 背景消除 KNN * * @return: void * @date: 2019年7月19日 下午22:10:14 */ public static void BSM_KNN() { // 1 創(chuàng)建 VideoCapture 對象 VideoCapture capture = new VideoCapture(0); // 2 使用 VideoCapture 對象讀取本地視頻 capture.open("D:\\BaiduNetdiskDownload\\video_003.avi"); // 4 使用 Mat video 保存視頻中的圖像幀 針對每一幀 做處理 Mat video = new Mat(); // 3 設置結構元素 Mat kernel1 = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(1, 1), new Point(-1, -1)); Mat kernel2 = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3), new Point(-1, -1)); // 4 KNN 背景消除 BackgroundSubtractorKNN knn = Video.createBackgroundSubtractorKNN(); Mat bitmask = new Mat(); while (capture.read(video)) { // 5 提取模型 BSM knn.apply(video, bitmask, -1); // 6 形態(tài)學變換(閉操作) Imgproc.morphologyEx(bitmask, bitmask, Imgproc.MORPH_CLOSE, kernel1, new Point(-1, -1)); // 7 膨脹 Imgproc.dilate(bitmask, bitmask, kernel2, new Point(-1, -1), 1); // 8 二值化 Imgproc.threshold(bitmask, bitmask, 20, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_TRIANGLE); // 9 將原圖中的背景設置為 Scalar(255, 255, 255) for (int i = 0, r = bitmask.rows(); i < r; i++) { for (int j = 0, c = bitmask.cols(); j < c; j++) { if (bitmask.get(i, j)[0] <= 150) { video.put(i, j, 255, 255, 255); } } } // 10 顯示 HighGui.imshow("KNN 背景移除", video); int index = HighGui.waitKey(100); if (index == 27) { capture.release(); break; } } } }
結果圖
到此這篇關于Java OpenCV利用KNN算法實現(xiàn)圖像背景移除的文章就介紹到這了,更多相關OpenCV圖像背景移除內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JAVA初級項目——實現(xiàn)圖書管理系統(tǒng)
這篇文章主要介紹了JAVA如何實現(xiàn)圖書管理系統(tǒng),文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下2020-06-06基于springboot實現(xiàn)一個簡單的aop實例
這篇文章主要介紹了基于springboot實現(xiàn)一個簡單的aop,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11簡單了解Spring beanfactory循環(huán)依賴命名重復屬性
這篇文章主要介紹了簡單了解Spring beanfactory循環(huán)依賴命名重復2大屬性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06