OpenCV 개요
강력한 오픈 소스 컴퓨터 비전 프레임 워크로서 OpenCV에는 500 개가 넘는 알고리즘 구현이 포함되어 있으며 여전히 증가하고 있습니다. 최신 버전은 3.2로 업데이트되었습니다. SDK는 Android 및 Java 플랫폼의 개발을 지원하며 일반적인 이미지 처리 요구 사항을 거의 충족시킬 수 있습니다. Java 및 Android 프로그래머를위한 최초의 이미지 처리 프레임 워크가되어야합니다. Java에서 OpenCV를 사용하는 구성은 매우 간단하며 공손함이없는 구성이 거의없는 것으로 말할 수 있습니다.
1 : 구성
OpenCV 관련 JAR 패키지의 소개를 구성하려면 먼저 OpenCV의 자체 추출 버전을 다운로드해야합니다. 다운로드 주소는 http://opencv.org/opencv-3-2.html입니다
그런 다음 웹 페이지 하단으로 당겨 Windows 자체 결정 개발 패키지를 다운로드하십시오.
다운로드 후 두 번 클릭하여 빌드 경로를 풀고 다음을 찾으십시오.
두 번 클릭하여 Java 폴더를 엽니 다.
Eclipse의 새 프로젝트로 직접 가져온 다음 x64의 DLL 파일을 Eclipse에 사용되는 Java JDK Bin 및 JRE/BIN 디렉토리에 X64의 DLL 파일을 복사하는 JAR이 있습니다. 환경이 구성되어 있습니다. 간단합니다! 구성된 최종 프로젝트 구조 :
두 가지 : 이미지 및 픽셀 작업
이미지를 읽으십시오. 한 문장으로 수행하십시오
mat src = imgcodecs.imread (ImageFilePath); if (src.empty ()) reture;
매트 객체를 BufferedImage 객체로 변환합니다
public bufferedimage conver2image (mat mat) {int width = mat.cols (); int height = mat.rows (); int dims = mat.Channels (); int [] pixels = new int [너비*높이]; 바이트 [] rgbdata = 새로운 바이트 [width*height*dims]; mat.get (0, 0, rgbdata); BufferedImage image = 새로운 BufferedImage (너비, 높이, BufferedImage.type_int_argb); int index = 0; int r = 0, g = 0, b = 0; for (int row = 0; row <height; row ++) {for (int col = 0; col <width; col ++) {if (dims == 3) {index = row*width*dims+col*dims; b = rgbdata [index] & 0xff; g = rgbdata [index+1] & 0xff; r = rgbdata [index+2] & 0xff; 픽셀 [행*width+col] = ((255 & 0xff) << 24) | ((R & 0xff) << 16) | ((G & 0xff) << 8) | b & 0xff; } if (dims == 1) {index = row*width + col; b = rgbdata [index] & 0xff; 픽셀 [행*width+col] = ((255 & 0xff) << 24) | ((b & 0xff) << 16) | ((b & 0xff) << 8) | b & 0xff; }}} setrgb (이미지, 0, 0, 너비, 높이, 픽셀); 반환 이미지;}BufferedImage 객체를 MAT 객체로 변환합니다
public mat convert2mat (bufferedImage image) {int width = image.getWidth (); int height = image.getheight (); MAT SRC = 새로운 매트 (새 크기 (너비, 높이), cvtype.cv_8uc3); int [] pixels = new int [너비*높이]; 바이트 [] rgbdata = 새로운 바이트 [너비*높이*3]; getrgb (이미지, 0, 0, 너비, 높이, 픽셀); int index = 0, c = 0; int r = 0, g = 0, b = 0; for (int row = 0; row <height; row ++) {for (int col = 0; col <width; col ++) {index = row*width+col; C = 픽셀 [index]; r = (c & 0xff0000) >> 16; g = (c & 0xff00) >> 8; b = c & 0xff; 색인 = 행*너비*3 + col*3; rgbdata [index] = (바이트) b; rgbdata [index+1] = (바이트) g; rgbdata [index+2] = (바이트) r; }} src.put (0, 0, rgbdata); 반환 src;}특히, BufferedImage 및 MAT의 RGB 채널의 순서는 다릅니다. 반대로, 매트 객체의 세 채널의 순서는 BufferedImage에서 bgr이고 rgb입니다.
매트에서 모든 픽셀 읽기 (여기서 이미지는 매트 유형 데이터)
int width = image.cols (); int height = image.rows (); int dims = image.channels (); byte [] data = new Byte [width*height*dims]; image.get (0, 0, data);
픽셀 작업을 가로 지르고 변경 사항을 저장합니다
int index = 0; int r = 0, g = 0, b = 0; for (int row = 0; row <height; row ++) {for (int col = 0; col <width*dims; col+= dims) {index = row*width*dims+col; b = 데이터 [index] & 0xff; g = 데이터 [index+1] & 0xff; r = data [index+2] & 0xff; r = 255 -r; g = 255 -g; b = 255 -b; 데이터 [index] = (바이트) b; 데이터 [index+1] = (바이트) g; 데이터 [index+2] = (바이트) r; }} image.put (0, 0, data);매트 객체 저장 이미지 파일 - 한 문장으로 수행 할 수 있습니다.
imgcodecs.imwrite (filepath, src);
OpenCV 코드 실행 및 테스트
빛과 어둠의 정도 조정 - 밝기 감소
빛과 어둠의 정도 조정 - 밝기 증가
가우스 블러
갈다
구배
그레이 스케일
위의 효과에 대한 완전한 Java 코드는 다음과 같습니다.
package com.gloomyfish.opencvdemo; import org.opencv.core.core; import org.opencv.core.cvtype; import org.opencv.core.mat; import org.opencv.core.size; import org.opencv.imgproc.imgproc; public imagefilters { / ** - inter matter (interver -matter). image) {int width = image.cols (); int height = image.rows (); int dims = image.channels (); 바이트 [] data = 새로운 바이트 [너비*높이*딤 스]; image.get (0, 0, 데이터); int index = 0; int r = 0, g = 0, b = 0; for (int row = 0; row <height; row ++) {for (int col = 0; col <width*dims; col+= dims) {index = row*width*dims+col; b = 데이터 [index] & 0xff; g = 데이터 [index+1] & 0xff; r = data [index+2] & 0xff; r = 255 -r; g = 255 -g; b = 255 -b; 데이터 [index] = (바이트) b; 데이터 [index+1] = (바이트) g; 데이터 [index+2] = (바이트) r; }} image.put (0, 0, data); 리턴 이미지; } public mat brightness (mat image) {// 밝기가 mat dst = new mat (); mat black = mat.zeros (image.size (), image.type ()); core.addweighted (이미지, 1.2, 검은 색, 0.5, 0, DST); 반환 DST; } public mat darkness (mat image) {// 밝기 감소 mat dst = new mat (); mat black = mat.zeros (image.size (), image.type ()); core.addweighted (이미지, 0.5, 검은 색, 0.5, 0, DST); 반환 DST; } public mat Grey (mat image) {// GrayScale mat Grey = new mat (); imgproc.cvtcolor (이미지, 회색, imgproc.color_bgr2gray); 회색 반환; } public mat sharpen (mat image) {// 매트 dst = new mat (); float [] Sharper = new float [] {0, -1, 0, -1, 5, -1, 0, -1, 0}; 매트 연산자 = 새 MAT (3, 3, cvtype.cv_32fc1); Operator.put (0, 0, Sharper); imgproc.filter2d (이미지, dst, -1, 연산자); 반환 DST; } public mat blur (mat image) {// Gaussian 퍼지 매트 dst = new mat (); imgproc.gaussianblur (이미지, dst, 새 크기 (15, 15), 0); 반환 DST; } public mat gradient (mat image) {// Gradient mat grad_x = new mat (); mat grad_y = new mat (); mat abs_grad_x = new mat (); mat abs_grad_y = new mat (); imgproc.sobel (image, grad_x, cvtype.cv_32f, 1, 0); imgproc.sobel (image, grad_y, cvtype.cv_32f, 0, 1); Core.convertsCaleAbs (Grad_x, abs_grad_x); Core.convertsCaleAbs (Grad_y, abs_grad_y); grad_x.release (); grad_y.release (); mat gradxy = new mat (); core.addweighted (abs_grad_x, 0.5, abs_grad_y, 0.5, 10, Gradxy); gradxy 리턴; }}너무 간단하다고 말할 수 있습니다. 또한 Java 용 OPENCV는 형태 학적 작업, 이진 이미지 분석, 이미지 기능 감지 및 인식, 템플릿 매칭, 히스토그램 관련 기능 등을 포함한 다양한 이미지 처리를 지원합니다. 일반적인 기계 학습 알고리즘 및 이미지 분석 방법. 가장 강력한 이미지 처리 SDK 및 개발 플랫폼 중 하나라고 할 수 있습니다. 나는 계속 탐구하고 공유 할 것입니다!
특별한주의를 기울이십시오
전화하기 전에이 문장을 추가하십시오
System.LoadLibrary (Core.native_library_name);
목적은 OpenCV API와 관련된 DLL 지원을로드하는 것입니다. 위의 코드 및 기능 구현은 JDK8 64 비트 및 OpenCV 버전 3.2를 기반으로합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.