您好,登錄后才能下訂單哦!
OpenCV中怎么自定義濾波器,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
上一篇我們學(xué)習(xí)的雙邊模糊中用到了ImgProc.filter2D的函數(shù),調(diào)用之前有一個(gè)Mat卷積核的設(shè)置
今天我們就來(lái)詳細(xì)講解一下這個(gè)的參數(shù).
還是老樣子,先在Clistitem加上對(duì)應(yīng)的這些參數(shù),這一次我們?cè)黾恿巳齻€(gè)參數(shù)
SelitemActivity的listview加上項(xiàng)
MainActivity的按鈕事件里加上對(duì)應(yīng)的事件
然后在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是讓均值模糊每個(gè)都改為他們的9分之1
//row類型和cols類型都是3,正好是9格
//put的參數(shù)里面前兩個(gè)參數(shù)是0 ,0 代表著是從最左上角第一個(gè)開(kāi)始處理,后面的data正好設(shè)置9個(gè)9分之1
Mat kernel = new Mat(3, 3, CvType.CV_32FC1);
if (Clistitem.IMAGE_CUSTOMBLURCOMMAND.equals(command)) {
//put的參數(shù)里面前兩個(gè)參數(shù)是0 ,0 代表著是從最左上角第一個(gè)開(kāi)始處理,后面的data正好設(shè)置9個(gè)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,所以就按下面的設(shè)置
kernel.put(0, 0, -1, -1, -1, -1, 8 - 1, -1, -1, -1);
} else if (Clistitem.IMAGE_CUSTOMBRARPENCOMMAND.equals(command)) {
//拉普拉斯銳化 九宮格里最中間的9,其余的都是-1,所以就按下面的設(shè)置
kernel.put(0, 0, -1, -1, -1, -1, 9 - 1, -1, -1, -1);
}
return kernel;
}
看完上述內(nèi)容,你們掌握OpenCV中怎么自定義濾波器的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。