日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA Opencv在图片上添加中文

發布時間:2025/3/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA Opencv在图片上添加中文 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:

將圖片進行均值、中值、高斯濾波,高斯邊緣檢測,并在圖片上添加中文文字。

一、算法思想

  • 首先經過opencv的一系列操作,例如高斯模糊、均值模糊等操作后、用Imgcodecs.imwrite方法將圖片寫出到指定的位置。
  • 再利用java的圖片添加文字的方法實現。
  • 再讀取輸出。
  • 二、代碼解析

    進行均值模糊

    均值濾波原理

    /** * void blur(InputArray src, OutputArray dst, Size ksize, * Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT ) * src:輸入圖像 * dst:輸出圖像 * ksize:均值濾波器模板大小 * anchor:錨點,如果為Point(-1,-1),則錨點是濾波器的中心點 * borderType:邊緣點插值類型 * */ Imgproc.blur(src, gry, new Size(4, 4));

    實現中值模糊

    中值濾波原理

    /** * void medianBlur(InputArray src, OutputArray dst, int ksize) * src:輸入圖像 * dst:輸出圖像 * ksize:均值濾波器模板大小,因為模板為正方形,所以只有一個參數。 * */ Imgproc.medianBlur(src,dst,5);

    實現高斯濾波

    高斯濾波原理

    /** * void GaussianBlur(InputArray src, OutputArray dst, Size ksize, * double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT ) ; * src:輸入圖像 * dst:輸出圖像 * ksize:高斯濾波器模板大小,ksize的寬和高必須是奇數 * sigmaX:高斯濾波在橫線的濾波系數 * sigmaY:高斯濾波在豎向的濾波系數 * 如果參數sigmaX=sigmaY=0,則實際用的是公式sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8 * borderType:邊界的處理方式,一般默認 * */ Imgproc.GaussianBlur(dst, gry, new Size(7,7), 2, 2);

    高斯邊緣檢測

    Laplacian函數
    convertScaleAbs()使用詳解

    /** * void Laplacian(InputArray src, OutputArray dst, int depth, int ksize=1, * double scale=1, double delta=0, int borderType=BORDER_DEFAULT ) * src:輸入圖像 * dst:輸出圖像 * depth:表示輸出圖像的深度 * ksize:表示拉普拉斯核的大小,1表示核的大小是三 * scale:表示是否對圖像進行放大或者縮小 * delta:表示是否在輸出的像素中加上一個量 * borderType:表示處理邊界的方式,一般默認 * */ /** * depth 圖像元素的位深度,可以是下面的其中之一: * 位深度 取值范圍 *IPL_DEPTH_8U - 無符號8位整型 0--255 *IPL_DEPTH_8S - 有符號8位整型 -128--127 *IPL_DEPTH_16U - 無符號16位整型 0--65535 *IPL_DEPTH_16S - 有符號16位整型 -32768--32767 *IPL_DEPTH_32S - 有符號32位整型 0--65535 *IPL_DEPTH_32F - 單精度浮點數 0.0--1.0 *IPL_DEPTH_64F - 雙精度浮點數 0.0--1.0 * */ /** * void convertScaleAbs(InputArray src, OutputArray dst, double alpha = 1, double beta = 0); * src:輸入數組 * dst:輸出數組 * alpha:乘數因子 * beta:偏移量 * */ Imgproc.GaussianBlur(src, dst, new Size(3,3), 0);//高斯濾波 Imgproc.cvtColor(dst,dst,Imgproc.COLOR_RGB2GRAY);//進行圖像彩色空間轉換,轉換為灰度圖 Imgproc.Laplacian(dst, gry, CvType.CV_16S, 3, 5, 0, Core.BORDER_DEFAULT); Core.convertScaleAbs(gry,dst,3,5);

    圖片的文字寫入

    圖片寫入報錯解決

    public class AlterIimage {public static boolean createStringMark(String filePath,String markContent,String outPath) { ImageIcon imgIcon=new ImageIcon(filePath); Image theImg =imgIcon.getImage(); int width=theImg.getWidth(null)==-1?200:theImg.getWidth(null); int height= theImg.getHeight(null)==-1?200:theImg.getHeight(null); // System.out.println(width); // System.out.println(height); // System.out.println(theImg);BufferedImage bimage = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB); //將一副圖片加載到內存中Graphics2D g=bimage.createGraphics(); //創建一個指定 BufferedImage 的 Graphics2D 對象Color mycolor = Color.GREEN; g.setColor(mycolor); g.setBackground(Color.GREEN); g.drawImage(theImg, 0, 0, null ); g.setFont(new Font("宋體",Font.PLAIN,20)); //字體、字型、字號 g.drawString(markContent,20,25); //畫文字 g.dispose(); try { FileOutputStream out=new FileOutputStream(outPath); //先用一個特定的輸出文件名 /*** Eclipse默認把這些受訪問限制的API設成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings* 里面的Deprecated and restricted API中的Forbidden references(access rules)選為Warning就可以編譯通過。* */JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage); param.setQuality(100, true);encoder.encode(bimage, param);out.close(); } catch(Exception e) { return false; } return true; } }

    最后結果展示

    總結

    以上是生活随笔為你收集整理的JAVA Opencv在图片上添加中文的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。