基于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
- 基于javacv的数字图像处理
- 基于DSP的数字图像处理(1)
- 基于GPU的数字图像并行处理研究
- 基于数字图像处理的人民币碎片拼接
- 数字图像处理 基于特征向量的变换
- 数字图像处理 基于模型的编码
- 基于matlab的数字图像处理GUI设计
- 基于MATLAB的数字图像处理之直方图处理
- 基于JavaCV的人脸识别软件
- 基于MATLAB数字图像处理的快速傅里叶变换编程实现
- 数字图像处理中基于纹理特性的匹配
- 基于标准C语言的数字图像处理基本框架
- 基于标准C语言的数字图像处理基本框架
- 数字图像处理(二) 基于LSB的图像加密
- 基于标准C语言的数字图像处理基本框架
- Java实现基于内容的数字图像处理代码
- 数字图像处理:第十一章基于特征向量的变换
- 数字图像处理:第二十二章 基于模型的编码
- 唐山哪个yiyuan看小孩自闭症好
- java基础整理のstatic关键字
- Linux Tools Intro - CMake build and install
- IOS开发中的几种设计模式介绍
- leetcode 188---Best Time to Buy and Sell Stock IV
- 基于javacv的数字图像处理
- 什么是准货币,准货币包括哪些
- 唐山哪儿治疗自闭症专业
- iOS使用UITableView从plist中选择省市区
- git
- SQLite的简介
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- 第12周-阅读、修改和运行关于交通工具类的程序,回答问题,以理解相关技术方法
- java基础整理の自动装箱雨拆箱(包装类)