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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

提取图像边缘

發(fā)布時(shí)間:2025/4/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 提取图像边缘 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

利用java打開一張圖片,并提取其邊緣。功能有打開文件,以及提取邊緣。

算法原理

由于邊緣提取的算法有很多種,而提取的精度在相同閾值的情況下也會(huì)有不同的結(jié)果。

這次我的邊緣提取使用索貝爾算子Sobel operator)

該算子會(huì)把圖像每一點(diǎn)的灰度矢量計(jì)算出來。而分別為橫向及縱向,將之與圖像作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。

算法核心:

public int getGrayPoint(int x, int y) {return grayData[y * width + x];}

  

protected final int GradientX(int x, int y) {return getGrayPoint(x - 1, y - 1) + 2*getGrayPoint(x - 1, y)+ getGrayPoint(x - 1, y + 1) - getGrayPoint(x + 1, y - 1)- 2*getGrayPoint(x + 1, y) - getGrayPoint(x + 1, y + 1);}protected final int GradientY(int x, int y) {return getGrayPoint(x - 1, y - 1) + 2*getGrayPoint(x, y - 1)+ getGrayPoint(x + 1, y - 1) - getGrayPoint(x - 1, y + 1)- 2*getGrayPoint(x, y + 1) - getGrayPoint(x + 1, y + 1);

而利用JAVA 的GUI界面將圖片打開且直接進(jìn)行操作:

setTitle("Test");setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);label = new JLabel();add(label);chooser = new JFileChooser();chooser.setCurrentDirectory(new File("."));JMenuBar menubar = new JMenuBar();setJMenuBar(menubar);JMenu menu = new JMenu("文件");JMenu menu2 = new JMenu("操作");menubar.add(menu);menubar.add(menu2);JMenuItem openItem = new JMenuItem("打開");JMenuItem Clicktime = new JMenuItem("提取邊緣");menu.add(openItem);menu2.add(Clicktime);JMenuItem exitItem = new JMenuItem("關(guān)閉");menu.add(exitItem);SobelEdgeDetect tp=new SobelEdgeDetect(50);openItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubint result = chooser.showOpenDialog(null);if(result == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();label.setIcon(new ImageIcon(name));try {tp.readImage(name);} catch (IOException ex) {Logger.getLogger(ImageViewerFrame.class.getName()).log(Level.SEVERE, null, ex);}}}});exitItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubSystem.exit(0);}});Clicktime.addActionListener(new ActionListener() {private int heightWMI;@Overridepublic void actionPerformed(ActionEvent e) {String desImageName = "1.jpg";tp.createEdgeImage(desImageName);label.setIcon(new ImageIcon(desImageName));}});}private JLabel label;private JFileChooser chooser;private static final int DEFAULT_WIDTH = 1280;private static final int DEFAULT_HEIGHT =800;

  執(zhí)行后可將圖片邊緣提取:(這里設(shè)定閾值為50)

預(yù)覽:

?

轉(zhuǎn)載于:https://www.cnblogs.com/Stringair/p/6250092.html

總結(jié)

以上是生活随笔為你收集整理的提取图像边缘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。