您好,登錄后才能下訂單哦!
OpenCV中怎么自定義濾波器,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
上一篇我們學習的雙邊模糊中用到了ImgProc.filter2D的函數,調用之前有一個Mat卷積核的設置
今天我們就來詳細講解一下這個的參數.
還是老樣子,先在Clistitem加上對應的這些參數,這一次我們增加了三個參數
SelitemActivity的listview加上項
MainActivity的按鈕事件里加上對應的事件
然后在ImgDealUtil加上我們的方法
public static void CustomFilter(String command, Bitmap bmp) {
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bmp, src);
Mat kernel = getCustomOperator(command);
Imgproc.filter2D(src, dst, -1, kernel, new Point(-1, -1), 0.0, Imgproc.BORDER_DEFAULT);
Utils.matToBitmap(dst, bmp);
src.release();
dst.release();
kernel.release();
}
private static Mat getCustomOperator(String command) {
//Cvtype改為32fc1是讓均值模糊每個都改為他們的9分之1
//row類型和cols類型都是3,正好是9格
//put的參數里面前兩個參數是0 ,0 代表著是從最左上角第一個開始處理,后面的data正好設置9個9分之1
Mat kernel = new Mat(3, 3, CvType.CV_32FC1);
if (Clistitem.IMAGE_CUSTOMBLURCOMMAND.equals(command)) {
//put的參數里面前兩個參數是0 ,0 代表著是從最左上角第一個開始處理,后面的data正好設置9個9分之1
kernel.put(0, 0, 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0);
} else if (Clistitem.IMAGE_CUSTOMEDGECOMMAND.equals(command)) {
//拉普拉斯邊緣 九宮格里最中間的8,其余的都是-1,所以就按下面的設置
kernel.put(0, 0, -1, -1, -1, -1, 8 - 1, -1, -1, -1);
} else if (Clistitem.IMAGE_CUSTOMBRARPENCOMMAND.equals(command)) {
//拉普拉斯銳化 九宮格里最中間的9,其余的都是-1,所以就按下面的設置
kernel.put(0, 0, -1, -1, -1, -1, 9 - 1, -1, -1, -1);
}
return kernel;
}
看完上述內容,你們掌握OpenCV中怎么自定義濾波器的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。