基于javacv的数字图像处理

来源:互联网 发布:红帽linux是什么 编辑:程序博客网 时间:2024/05/22 14:10

项目需要javacv的包,用maven构建如下
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>0.11</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>0.11</version>
</dependency>

javacv里面有对象Mat,CvMat,IplImage对应opencv相应对象
如果要使用例如cvSetImageROI之类的方法需要static引入
下面是图片反白的示例:

package com.dealmap;import static org.bytedeco.javacpp.opencv_core.CV_8U;import static org.bytedeco.javacpp.opencv_core.subtract;import static org.bytedeco.javacpp.opencv_highgui.CV_LOAD_IMAGE_COLOR;import static org.bytedeco.javacpp.opencv_highgui.imread;import static org.bytedeco.javacpp.opencv_highgui.imwrite;import static org.bytedeco.javacpp.opencv_imgproc.COLOR_BGR2GRAY;import static org.bytedeco.javacpp.opencv_imgproc.cvtColor;import org.bytedeco.javacpp.opencv_core.Mat;import org.bytedeco.javacpp.opencv_core.Size;public class ReverseWrite {    public static void main(String[] args)  {           Mat mat = imread("E:\\Sunset.jpg",CV_LOAD_IMAGE_COLOR);         Mat abc = new Mat();        //gray          cvtColor(mat, abc, COLOR_BGR2GRAY);        //1          Mat dst= Mat.ones(new Size(abc.rows(),abc.cols()), CV_8U).asMat();        //255        dst=  dst.mul(dst, 255).asMat();        //sub          subtract(dst,abc,dst);          imwrite("E:\\aaa.jpg",dst);        }  }

下面是DCT图像压缩的示例:

package com.dealmap;import static org.bytedeco.javacpp.opencv_core.*;import static org.bytedeco.javacpp.opencv_highgui.*;import org.bytedeco.javacpp.opencv_core.CvMat;import org.bytedeco.javacpp.opencv_core.IplImage;import org.bytedeco.javacpp.opencv_core.Mat;public class CompressImg {    private static CvMat T;    private static CvMat Tp;    private static CvMat maskMat;static{    double[][] tt = {            { 0.353553390593274, 0.353553390593274, 0.353553390593274,                    0.353553390593274, 0.353553390593274,                    0.353553390593274, 0.353553390593274, 0.353553390593274 },            { 0.490392640201615, 0.415734806151273, 0.277785116509801,                    0.0975451610080642, -0.0975451610080641,                    -0.277785116509801, -0.415734806151273,                    -0.490392640201615 },            { 0.461939766255643, 0.191341716182545, -0.191341716182545,                    -0.461939766255643, -0.461939766255643,                    -0.191341716182545, 0.191341716182545,                    0.461939766255643 },            { 0.415734806151273, -0.0975451610080641, -0.490392640201615,                    -0.277785116509801, 0.277785116509801,                    0.490392640201615, 0.0975451610080640,                    -0.415734806151272 },            { 0.353553390593274, -0.353553390593274, -0.353553390593274,                    0.353553390593274, 0.353553390593274,                    -0.353553390593273, -0.353553390593274,                    0.353553390593273 },            { 0.277785116509801, -0.490392640201615, 0.0975451610080642,                    0.415734806151273, -0.415734806151273,                    -0.0975451610080649, 0.490392640201615,                    -0.277785116509801 },            { 0.191341716182545, -0.461939766255643, 0.461939766255643,                    -0.191341716182545, -0.191341716182545,                    0.461939766255644, -0.461939766255644,                    0.191341716182543 },            { 0.0975451610080642, -0.277785116509801, 0.415734806151273,                    -0.490392640201615, 0.490392640201615,                    -0.415734806151272, 0.277785116509802,                    -0.0975451610080625 } };    T = cvCreateMat(8, 8,CV_32F);    for(int i=0;i<8;i++)        for(int j=0;j<8;j++)    T.put(i, j, tt[i][j]);    // T =cvCreateMat(8,8,CV_32F);    // CvMat dct = cvCreateMat(rImg.height(), rImg.width(),src.type());    // cvScale(rImg,dst,1,0);    // cvDCT(dst, dct, CV_DXT_FORWARD);     Tp = cvCreateMat(T.cols(), T.rows(), CV_32F );    cvTranspose(T, Tp);    double[] mask = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1,            0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,            0, 0, 0, 0 };     maskMat = cvCreateMat(8, 8,CV_32F);    for(int i=0;i<8;i++)        for(int j=0;j<8;j++)            maskMat.put(i, j, mask[i*8+j]);}    public static void main(String[] args) {        IplImage orignTImg = cvLoadImage("E:\\Sunset.jpg");        IplImage orignImg = cvCreateImage(cvSize(orignTImg.width(), orignTImg.height()), IPL_DEPTH_32F, 3);//      orignImg = cvCloneImage(orignTImg);        cvConvertScale(orignTImg, orignImg, 1, 0);        CvMat src = orignImg.asCvMat();        IplImage destImg = cvCreateImage(cvSize(orignImg.width(), orignImg.height()), IPL_DEPTH_32F, 3);//      IplImage destImg2 = cvCreateImage(cvSize(orignImg.width(), orignImg.height()), IPL_DEPTH_32F, 3);        int ceil_height = src.rows()/8;          int ceil_width  = src.cols()/8;         for (int rowi = 0; rowi < ceil_height; rowi++)            for (int colj = 0; colj < ceil_width; colj++) {                //lock area                cvSetImageROI(orignImg,cvRect(colj*8,rowi*8,8,8));                IplImage tempImg = cvCreateImage(cvSize(8, 8), IPL_DEPTH_32F, 3);                 cvCopy(orignImg, tempImg);                System.out.println(orignImg.depth());                 //spilt                IplImage rImg = cvCreateImage(tempImg.cvSize(),IPL_DEPTH_32F, 1);                IplImage gImg = cvCreateImage(tempImg.cvSize(), IPL_DEPTH_32F, 1);                IplImage bImg = cvCreateImage(tempImg.cvSize(), IPL_DEPTH_32F, 1);//              IplImage bImg3 = cvCreateImage(tempImg.cvSize(),IPL_DEPTH_32F, 3);//              IplImage gImg3 = cvCreateImage(tempImg.cvSize(), orignImg.depth(), 3);//              IplImage rImg3 = cvCreateImage(tempImg.cvSize(), orignImg.depth(), 3);                cvSplit(tempImg, bImg, gImg, rImg, null);//              cvMerge(bImg, null, null, null, bImg3);//              cvMerge(null, gImg, null, null, gImg3);//              cvMerge(null, gImg, null, null, rImg3);                Mat rMat = new Mat(rImg);                rMat.convertTo(rMat, CV_32F);                CvMat I2 = reSolve(rMat);                rImg = I2.asIplImage();//              cvMerge(null, null, sigImg, null, rImg3);//rMat.convertTo(rMat, CV_32FC2);//              rMat =cvCloneMat( rImg.asCvMat());//              cvConvert(rImg3, rMat);                Mat gMat = new Mat(gImg);                gMat.convertTo(gMat, CV_32F);                I2 = reSolve(gMat);                gImg = I2.asIplImage();//              cvMerge(null, sigImg, null, null, gImg3);                Mat bMat = new Mat(bImg);                bMat.convertTo(bMat, CV_32F);                I2 = reSolve(bMat);                bImg = I2.asIplImage();//              cvMerge( sigImg,null, null, null, bImg3);                cvMerge( bImg,gImg, rImg, null, tempImg);                cvSetImageROI(destImg,cvRect(colj*8,rowi*8,8,8));//              cvSetImageROI(destImg2,cvRect(colj*8,rowi*8,8,8));                 cvCopy(tempImg, destImg);//               cvCopy(bImg3, destImg2);                 cvResetImageROI(destImg);  //               cvResetImageROI(destImg2);                  cvResetImageROI(orignImg);            }        imwrite("E:\\aaa1.jpg", new Mat(destImg.asCvMat()));//      imwrite("E:\\aaa2.jpg", new Mat(destImg2.asCvMat()));//      imwrite("E:\\aaa3.jpg", new Mat(orignImg.asCvMat()));    }    private static CvMat reSolve(Mat rMat) {        // imwrite("E:\\aaa1.jpg",new Mat(dct));//System.out.println(T.arraySize());        // Mat srcT = new Mat(T);        //        CvMat temp = cvCreateMat(8, 8,CV_32F );        CvMat B = cvCreateMat(8, 8,CV_32F);        System.out.println(T.depth()+"!"+rMat.depth());        //T *x        cvMatMul(T, rMat.asCvMat(), temp);        //B=T *x *T'        cvMatMul(temp, Tp, B);        CvMat B2 = cvCreateMat(8, 8,CV_32F);        //B2=mask.*B        cvMul(maskMat, B, B2);        CvMat I2 = cvCreateMat(8, 8,CV_32F);        cvMatMul(Tp, B2, temp);        //I2=T' *B2 *T        cvMatMul(temp, T, I2);        return I2;    }}

转载请注明出处

0 0
原创粉丝点击