<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="com.oreilly.servlet.*" %>
<%@ page import="com.oreilly.servlet.multipart.*" %>
<%@ page import="javax.imageio.*" %>
<%@ page import="java.awt.image.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
///////////////////////
//전역변수부
//////////////////////
int[][][] inImage;
int inH,inW;
int[][][] outImage;
static int outH,outW;
File inFp,outFp;
float[] rgb = new float[3];
float[] hsv = new float[3];
float[] abc = new float[3];
float[] def = new float[3];
//Parameter Variable
String algo, para1, para2;
String inFname, outFname;
/////////////////////
알고리즘 처리 함수가 들어갈 영역
//////////////////////
%>
<%
//////////////////////////////
//메인코드부
/////////////////////////////
//(0)파라미터 넘겨 받기
MultipartRequest multi = new MultipartRequest(request, "C:/Upload",
5*1024*1024, "utf-8", new DefaultFileRenamePolicy());
String tmp;
Enumeration params = multi.getParameterNames(); //주의! 파라미터 순서가 반대
tmp = (String) params.nextElement();
para2 = multi.getParameter(tmp);
tmp = (String) params.nextElement();
para1 = multi.getParameter(tmp);
tmp = (String) params.nextElement();
algo = multi.getParameter(tmp);
// File
Enumeration files = multi.getFileNames(); // 여러개 파일
tmp = (String) files.nextElement(); // 첫 파일 한개
String filename = multi.getFilesystemName(tmp);// 파일명을 추출
//(1)입력 영상 파일 처리
inFp = new File("C:/Upload/"+filename);
BufferedImage bImage = ImageIO.read(inFp);
//(2)파일 --> 메모리
//중요! 입력 영상의 폭과 높이를 알아내야함!
inW = bImage.getHeight();
inH = bImage.getWidth();
//메모리 할당
inImage = new int[3][inH][inW];
//읽어오기
for(int i=0; i<inH; i++) {
for (int k=0; k<inW; k++) {
int rgb = bImage.getRGB(i,k); // F377D6
int r = (rgb >> 16) & 0xFF; // >>2Byte --->0000F3 & 0000FF --> F3
int g = (rgb >> 8) & 0xFF; // >>1Byte --->00F377 & 0000FF --> 77
int b = (rgb >> 0) & 0xFF; // >>0Byte --->F377D6 & 0000FF --> D6
inImage[0][i][k] = r;
inImage[1][i][k] = g;
inImage[2][i][k] = b;
}
}
//Image Processing
switch(algo){
case "101"://동일영상
equalImage();break;
case "102"://반전영상
reverseImage();break;
case "103"://영상 더하기/빼기
addImage();break;
case "104"://영상 곱하기
gopImage();break;
case "105"://영상 나누기
divImage();break;
case "106"://흑백127기준
image127();break;
case "107"://흑백 평균 기준
avgImage();break;
case "108"://파라볼라 컵
paraCupImage();break;
case "109"://파라볼라 캡
paraCapImage();break;
case "110"://감마
gammaImage();break;
case "201"://상하미러링
udImage();break;
case "202"://좌우미러링
lrImage();break;
case "203"://영상이동
swapImage();break;
case "204"://영상 시계방향회전
rotateImage();break;
case "205"://영상 반시계방향 회전
spinImage();break;
case "207"://영상축소
zoomOutImage();break;
case "208"://영상확대
zoomInImage();break;
case "209"://영상확대(백워딩)
zoomInImage2();break;
case "301"://엠보싱
embossingImage();break;
case "302"://블러링
blurrImage();break;
case "303"://샤프닝
sharpenImage();break;
case "304"://가우시안
gaussianImage();break;
case "305"://고주파 샤프닝
hpfSharpImage();break;
case "306"://이동과 차분
sadImage();break;
case "307"://유사연산자
opImage();break;
case "308"://로버츠 알고리즘
robertsImage();break;
case "309"://소벨 알고리즘
sobelImage();break;
case "310"://프리윗 알고리즘
prewittImage();break;
case "311"://라플라시안 알고리즘
laplacianImage();break;
case "312"://로그 알고리즘
logImage();break;
case "313"://도그 알고리즘
dogImage();break;
case "401"://스트레칭
strechImage();break;
case "402"://엔드-인
endInImage();break;
case "403"://평활화
equalizeImage();break;
case "501"://채도변환
saturImage();break;
case "502"://그레이스케일
grayImage();break;
case "503"://명도변환
intensityImage();break;
case "504"://오렌지이미지추출
orangeImage();break;
}
//(4)결과를 파일로 저장하기
outFp = new File("C:/out/out_"+filename);
BufferedImage oImage
= new BufferedImage(outH, outW, BufferedImage.TYPE_INT_RGB); // Empty Image
//Memory --> File
for (int i=0; i< outH; i++) {
for (int k=0; k< outW; k++) {
int r = outImage[0][i][k]; // F3
int g = outImage[1][i][k]; // 77
int b = outImage[2][i][k]; // D6
int px = 0;
px = px | (r << 16); // 000000 | (F30000) --> F30000
px = px | (g << 8); // F30000 | (007700) --> F37700
px = px | (b << 0); // F37700 | (0000D6) --> F377D6
oImage.setRGB(i,k,px);
}
}
ImageIO.write(oImage, "jpg", outFp);
out.println("<h1>" + filename + " 영상 처리 완료 !! </h1>");
String url="<p><h2><a href='http://192.168.56.102:8080/";
url += "GrayImageProcessing/download.jsp?file=";
url += "out_" + filename + "'> !! 다운로드 !! </a></h2>";
out.println(url);
%>
</body>
</html>
'JSP환경에서 OpenCV없는 컬러영상처리' 카테고리의 다른 글
화소영역처리 (0) | 2022.09.29 |
---|---|
기하학처리 (0) | 2022.09.29 |
화소점처리 (0) | 2022.09.29 |
JSP클라이언트 코드 (0) | 2022.09.29 |
가상윈도우에서 이클립스를 통해 서버환경 구축하기 (0) | 2022.09.27 |