欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何實現(xiàn)圖像的卷積效果

 更新時間:2024年03月25日 09:52:23   作者:feng之鋒  
這篇文章主要介紹了Java如何實現(xiàn)圖像的卷積效果問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

圖像的卷積

指的是使用一個卷積核(kernel)對圖像中的每一個像素進行一些列操作。

卷積核(算子)是用來做圖像處理時的矩陣,圖像處理時也稱為掩膜,是于原圖像做運算的參數(shù)。

卷積核通常是一個方形的網格結構,該區(qū)域上的每一個方格都有一個權重值,

如下圖,利用一個3 * 3的卷積核與圖像上的相應大小的區(qū)域進行卷積運算,即對應相乘再相加,0*4+0*0+0*0+0*0+0*1+1*0+0*0+1*0+2*(-4)=-8.

Java中實現(xiàn)的效果

主類:

package com.yf1105;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JFrame;


public class DrawF {
	public static void main(String[] args) {
		DrawF drawpanel = new DrawF();
		drawpanel.showUI();
		
	}
	
	public void showUI() {
		JFrame jf = new JFrame();
		jf.setTitle("圖片");
		jf.setSize(800, 800);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setLayout(new FlowLayout());
		jf.setLocationRelativeTo(null);
		
		jf.setVisible(true);
		
		//獲取畫筆一定要在可見之后
		Graphics g = jf.getGraphics();
		//添加監(jiān)聽器
		DrawListener mouse = new DrawListener();
		jf.addMouseListener(mouse);
		//將主類中的畫筆傳給監(jiān)聽器類中去
		mouse.g = g;
	}
}

監(jiān)聽類:

package com.yf1105;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class DrawListener implements MouseListener{
	Graphics g;
	
	public int[][] getImagePixel(String path){
		File file = new File(path);
		
		BufferedImage bufferImage = null;
		try {
			bufferImage = ImageIO.read(file);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			
		}
		
		int w = bufferImage.getWidth();
		int h = bufferImage.getHeight();
		
		int [][] pixelArray = new int[w][h];
		
		for(int i = 0; i < w; i++) {
			for(int j = 0; j < h; j++) {
				//讀取每個位置的像素點對應的RGB值
				int pixel = bufferImage.getRGB(i, j);
				pixelArray[i][j] = pixel;
			}
		}
		return pixelArray;
		
	}
	
	//在界面上畫出ia數(shù)組圖像,即卷積結果
	public void drawjj(Graphics g) {
		int[][] ia = getImagePixel("image/3.jpg");
		ia = valide(ia, kArray);
		for(int i = 0; i<ia.length; i++) {
			for(int j = 0; j<ia[0].length; j++) {
				int pie = ia[i][j];
				Color color = new Color(pie,pie,pie);
				g.setColor(color);
				g.fillRect(i, j, 1, 1);
			}
		}
		
	}
	
	//卷積核
	float[][] kArray = {{-1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1}, {-1, -1, 25, -1, -1}, {-1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1}};
	
	
	//實現(xiàn)卷積操作
	public static int[][] valide(int[][] src, float[][] filter){
		int[][] tem = new int[filter.length][filter[0].length];
		int valideWidth = src[0].length - filter[0].length;
		int valideHeigth = src.length - filter.length + 1;
		int[][] valide = new int[valideHeigth][valideWidth];
		
		for(int i = 0; i<valideHeigth; i++) {
			for(int j = 0; j<valideWidth; j++) {
				for(int y = 0; y<filter.length; y++) {
					for(int z = 0; z<filter[0].length; z++ ) {
						tem[y][z] = (int)((src[i+y][j+z])*filter[y][z]); 
					}
				}
				int kk = 0;
				for(int y = 0; y<filter.length; y++) {
					for(int z = 0; z<filter[0].length; z++) {
						kk += tem[y][z];
					}
				}
				if(kk<0)kk=0;
				if(kk>255)kk=255;
				valide[i][j] = kk;
				
				}
			}
			return valide;
		}
		
	
	public void mouseClicked(MouseEvent e) {
		System.out.println("點擊");
		drawjj(g);
		
		
	}
	
	public void mousePressed(MouseEvent e) {}
	
	public void mouseReleased(MouseEvent e) {}
	
	public void mouseEntered(MouseEvent e) {}
	
	public void mouseExited(MouseEvent e) {}
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java的Jackson庫中復雜對象集合的幾種簡單轉換

    Java的Jackson庫中復雜對象集合的幾種簡單轉換

    本文主要介紹了Java的Jackson庫中復雜對象集合的幾種簡單轉換。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 一文搞懂Spring Bean中的作用域和生命周期

    一文搞懂Spring Bean中的作用域和生命周期

    Spring作為當前Java最流行、最強大的輕量級框架,受到了程序員的熱烈歡迎。了解Spring?Bean的作用域與生命周期是非常必要的,快跟隨小編一起學習學習吧
    2022-06-06
  • logback-spring.xml配置詳解

    logback-spring.xml配置詳解

    這篇文章主要介紹了logback-spring.xml詳解,本文介紹了logback-spring.xml相關的知識與概念,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Java使用CompletableFuture進行非阻塞IO詳解

    Java使用CompletableFuture進行非阻塞IO詳解

    這篇文章主要介紹了Java使用CompletableFuture進行非阻塞IO詳解,CompletableFuture是Java中的一個類,用于支持異步編程和處理異步任務的結果,它提供了一種方便的方式來處理異步操作,并允許我們以非阻塞的方式執(zhí)行任務,需要的朋友可以參考下
    2023-09-09
  • mybatis動態(tài)新增(insert)和修改(update)方式

    mybatis動態(tài)新增(insert)和修改(update)方式

    這篇文章主要介紹了mybatis動態(tài)新增(insert)和修改(update)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • String轉JSONObject的兩種方式

    String轉JSONObject的兩種方式

    這篇文章主要介紹了String轉JSONObject,本文通過實例代碼給大家介紹兩種方式轉換,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • springboot 配置文件配置項前綴為0的數(shù)字特殊處理方式

    springboot 配置文件配置項前綴為0的數(shù)字特殊處理方式

    這篇文章主要介紹了springboot 配置文件配置項前綴為0的數(shù)字特殊處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中字符串中連續(xù)相同字符去重方法

    Java中字符串中連續(xù)相同字符去重方法

    今天小編就為大家分享一篇Java中字符串中連續(xù)相同字符去重方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java中jar包的生成與使用方式

    java中jar包的生成與使用方式

    這篇文章主要介紹了java中jar包的生成與使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 解決@Validated注解無效,嵌套對象屬性的@NotBlank無效問題

    解決@Validated注解無效,嵌套對象屬性的@NotBlank無效問題

    這篇文章主要介紹了解決@Validated注解無效,嵌套對象屬性的@NotBlank無效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論