天天看點

OpenCV-濾波矩陣(java版)

@​​TOC​​

用下圖做示範

OpenCV-濾波矩陣(java版)

multiply()

顧名思義,乘法函數。使用該函數可以将像素的每個通道值乘以這個參數。

方法 說明
multiply(Mat src1, Scalar src2, Mat dst, double scale, int dtype)

src1:原圖像

src2:顔色矩陣

scale:src2矩陣參數的乘數值(從圖像的角度來說,可以了解為亮度值,值越大,圖像越亮)

dst:目标圖像

dtype:圖像(矩陣)類型

multiply(Mat src1, Scalar src2, Mat dst, double scale)
multiply(Mat src1, Scalar src2, Mat dst)

例:當 src2為[0.0,0.5,1.0]時候,表示在原矩陣像素值的基礎上,藍色通道值乘以0,綠色通道值乘以0.5,紅色通道值乘以0(當最終通道值大于255時,通道值為255)

scale:表示在src通道的基礎上乘以相對應的scale值,比如scale為3時,結合前面的src2矩陣,此時src2矩陣值變為[0.0,1.5,3.0]

為驗證結果,下面建立一個3*3,像素值為[122,122,122]的矩陣圖

示例:

public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);
        Mat mat = new Mat(3,3, CvType.CV_8UC3,new Scalar(122,122,122));
        System.out.println("mat1>>"+mat.dump());
        Core.multiply(mat,new Scalar(0.0,0.5,1.0),mat,3,CvType.CV_8UC3);
        System.out.println("mat2>>"+mat.dump()+"=="+mat);
        HighGui.imshow("mat",mat);
        HighGui.waitKey(0);
    }      

執行結果

mat1>>[122, 122, 122, 122, 122, 122, 122, 122, 122;

122, 122, 122, 122, 122, 122, 122, 122, 122;

122, 122, 122, 122, 122, 122, 122, 122, 122]

mat2>>[ 0, 183, 255, 0, 183, 255, 0, 183, 255;

0, 183, 255, 0, 183, 255, 0, 183, 255;

0, 183, 255, 0, 183, 255, 0, 183, 255]==Mat [ 33CV_8UC3, isCont=true, isSubmat=false, nativeObj=0xbdaeb0, dataAddr=0xbdb100 ]

讀取圖像

示例:

public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);
        Mat mat = Imgcodecs.imread("flower.jpg");
        Core.multiply(mat,new Scalar(0.0,0.5,1.0),mat,1.0,CvType.CV_8UC3);
        HighGui.imshow("mat",mat);
        HighGui.waitKey(0);
    }      

結果

OpenCV-濾波矩陣(java版)
public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);
        Mat mat = Imgcodecs.imread("flower.jpg");
        //為示範效果,将Scalar設為(1.0,1.0,1.0)
        Core.multiply(mat,new Scalar(1.0,1.0,1.0),mat,2.0,CvType.CV_8UC3);
        HighGui.imshow("mat",mat);
        HighGui.waitKey(0);
    }