java使用Opencv小例子,从合并的两个图片中减去一张图片
java 使⽤Opencv ⼩例⼦,从合并的两个图⽚中减去⼀张图⽚将两个图⽚合并很容易(下⾯第⼆个程序是利⽤合并两张图⽚),但有时候需要从两个合并的图⽚中分离出⼀张图⽚,查了⼀下提供了图⽚相减的功能,其实不⽌图⽚相减,基本的运算都提供了,这⾥以图⽚相减为例说明。
另外附上⽤java 合并两张图⽚的程序,当然⽤opencv 实现起来更⽅便。[java]
01. package  swing_interface;  02.  03. import  Core;  04. import  CvType;  05. import  Mat;  06. import  org.opencv.highgui.Highgui;  07.  08. /** 09.  * 执⾏两个图⽚的相减操作,⽤于抓取⽤户所画的部分,去除本来就有的部分 10.  */  11. public  class  ImageSub {  12.  13.    public  static  void  sub(String two_path, String one_path, String des_path) {  14.        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);  15.  16.        // 读取图像,不改变图像的原始信息  17.        Mat image1 = Highgui.imread(two_path, Highgui.CV_LOAD_IMAGE_COLOR);  18.        Mat image2 = Highgui.imread(one_path, Highgui.CV_LOAD_IMAGE_COLOR);  19.              20.        Mat image3 = new  Mat(image1.size(), CvType.CV_64F);  21.        Core.subtract(image2, image1, image3);  22.  23.        Mat image5 = new  Mat(image1.size(), CvType.CV_64F);  24.        Core.bitwise_not(image3, image5);  25.  26.        Highgui.imwrite(des_path, image5);  27.    }  28.      29.    public  static  void  main(String[] args) {  30.        String dir = Property("user.dir");  31.        ImageSub.sub(dir+"/r_pic/user_paint_two.jpg", d
ir+"/r_pic/user_paint_one.jpg", dir+"/res.jpg");  32.    }  33.  34. }
[java]
01. package merge;
02. import java.awt.Graphics2D;
03. import java.awt.image.BufferedImage;
04. import java.io.File;
05. import java.io.IOException;
06.
07. import javax.imageio.ImageIO;
08.
09. /**
10.  * 图⽚拼接
11.  * 把多张宽度⼀样的图⽚拼接成⼀张⼤图⽚
12.  */
13. public class Merge {
14.
15. public static String path = Property("user.dir");
16.
17. public static void main(String[] args) {
18.        callMergeSimple();
19.    }
20.
21. public static void callMergeSimple(){
22.
为什么穿越火线玩不了
23.        File file1 = new File(path+"/merge1/1.jpg");
24.        File file2 = new File(path+"/merge1/2.jpg");
25.        File file3 = new File(path+"/merge2/res.jpg");
26.        BufferedImage image1 = null,image2 = null;
27. try {
28.            image1 = ad(file1);
29.            image2 = ad(file2);
30.        } catch (IOException e) {
31.                e.printStackTrace();
32.        }
33.        mergeSimple(image1,image2,100,300,file3);
34.    }
35.
36. public static boolean mergeSimple(BufferedImage image1, BufferedImage image2, int posw, int posh, File fileOutput) {
37.
38. //合并两个图像
39. int w1 = Width();
40. int h1 = Height();
41. int w2 = Width();
42. int h2 = Height();
43.
44.          BufferedImage imageSaved = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB);
45.          Graphics2D g2d = ateGraphics();
46.          g2d.drawImage(image1, null, 0, 0);
47.
48. for (int i = 0; i < w2; i++) {
49. for (int j = 0; j < h2; j++) {
50. int rgb1 = RGB(i + posw, j + posh);
51. int rgb2 = RGB(i, j);
52.
53. if (rgb1 != rgb2) {
54.                      rgb2 = rgb1 & rgb2;ip属地是现在所在的地址么
55.                  }
我的ip地址56.                  imageSaved.setRGB(i + posw, j + posh, rgb2);
2023年元旦放假通知57.              }
58.          }
59.
60. boolean b = false;
康巴什新区61. try {
62.                  b = ImageIO.write(imageSaved, "png", fileOutput);
游戏中前期防御塔63.          } catch (IOException ie) {
64.              ie.printStackTrace();
65.          }
66. return b;
67.          }
68. }
69.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。