opencvの概要
強力なオープンソースコンピュータービジョンフレームワークとして、OpenCVには500を超えるアルゴリズムの実装が含まれており、まだ増加しています。その最新バージョンは3.2に更新されました。そのSDKは、AndroidプラットフォームとJavaプラットフォームの開発をサポートしており、一般的な画像処理要件をほとんど満たすことができます。 JavaおよびAndroidプログラマーの最初の画像処理フレームワークになるはずです。 JavaでOpenCVを使用する構成は非常に簡単であり、礼儀正しさのない構成はほぼゼロであると言えます。
1:構成
OPENCV関連のJARパッケージの導入を構成するには、最初にOpenCVの自己抽出バージョンをダウンロードする必要があります。ダウンロードアドレスは、http://opencv.org/opencv-3-2.htmlです
次に、Webページの下部に引っ張り、Windowsの自己決定開発パッケージをダウンロードします
ダウンロードした後、ダブルクリックしてビルドパスを解凍し、以下を見つけます。
ダブルクリックしてJavaフォルダーを開きます。
Eclipseで新しいプロジェクトに直接インポートされるjarがあり、x64のDLLファイルをEclipseで使用したJava JDKビンおよびJRE/ビンディレクトリにコピーします。環境が構成されているので、簡単です!構成された最終プロジェクト構造:
2:画像の読み込みとピクセル操作
画像を読んでください - 1つの文で行います
MAT SRC = IMGCODECS.IMREAD(ImageFilepath); if(src.empty())return;
MATオブジェクトをBufferEdImageオブジェクトに変換します
public bufferedimage conver2image(マットマット){int width = mat.cols(); int height = mat.rows(); int dims = mat.channels(); int [] pixels = new int [width*height]; byte [] rgbdata = new byte [width*height*dims]; mat.get(0、0、rgbdata); BufferedImage Image = new 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;ピクセル[row*width+col] =((255&0xff)<< 24)| ((r&0xff)<< 16)| ((g&0xff)<< 8)| b&0xff; } if(dims == 1){index = row*width + col; b = rgbdata [index]&0xff;ピクセル[row*width+col] =((255&0xff)<< 24)| ((b&0xff)<< 16)| ((b&0xff)<< 8)| b&0xff; }}} setrgb(image、0、0、width、height、pixels);画像を返します;}bufferedimageオブジェクトをMATオブジェクトに変換します
パブリックマットconvert2mat(bufferedimage image){int width = image.getWidth(); int height = image.getheight(); MAT SRC =新しいマット(新しいサイズ(幅、高さ)、CVTYPE.CV_8UC3); int [] pixels = new int [width*height]; byte [] rgbdata = new byte [width*height*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; index = row*width*3 + col*3; rgbdata [index] =(byte)b; rgbdata [index+1] =(byte)g; rgbdata [index+2] =(byte)r; }} src.put(0、0、rgbdata); srcを返します;}特に、BufferedImageとMATのRGBチャネルの順序は異なります。それどころか、MATオブジェクトの3つのチャネルの順序は、緩衝液の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; b = data [index]&0xff; g = data [index+1]&0xff; r = data [index+2]&0xff; r = 255 -r; g = 255 -g; b = 255 -b; data [index] =(byte)b; data [index+1] =(byte)g; data [index+2] =(byte)r; }} image.put(0、0、data);
マットオブジェクトを画像ファイルとして保存 - 1つの文で実行できます
imgcodecs.imwrite(filepath、src);
OpenCVコードの実行とテスト
光と闇の程度を調整します - 明るさを減らす
光と闇の程度を調整します - 明るさの増加
ガウスブルール
シャープ
勾配
グレースケール
上記の効果の完全なJavaコードは次のとおりです。
パッケージ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 colulfiltter(public colulfiltter(画像){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 = data [index]&0xff; g = data [index+1]&0xff; r = data [index+2]&0xff; r = 255 -r; g = 255 -g; b = 255 -b; data [index] =(byte)b; data [index+1] =(byte)g; data [index+2] =(byte)r; }} image.put(0、0、data);画像を返します。 }パブリックマットの明るさ(マット画像){//明るさの増加マットdst = new Mat(); MAT BLACK = MAT.ZEROS(IMAGE.SIZE()、IMAGE.TYPE()); core.adddeweighted(画像、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.adddeweighted(画像、0.5、ブラック、0.5、0、dst); DSTを返します。 } public Mat Gray(Mat Image){// Grayscale Mat Gray = new Mat(); imgproc.cvtcolor(画像、灰色、imgproc.color_bgr2gray);灰色を返します。 } public Mat Sharpen(Mat Image){// Sharpen Mat dst = new Mat(); float [] sharper = new float [] {0、-1、0、-1、5、-1、0、-1、0}; MATオペレーター=新しいMAT(3、3、CVTYPE.CV_32FC1); operator.put(0、0、sharper); imgproc.filter2d(image、dst、-1、operator); DSTを返します。 } public Mat Blur(MAT Image){// Gaussian Fuzzy Mat dst = new Mat(); imgproc.gaussianblur(image、dst、new size(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および開発プラットフォームの1つと言えます。私は引き続き探索し、共有します!
特に注意してください
電話する前に、必ずこの文を追加してください
System.LoadLibrary(core.native_library_name);
目的は、OPENCV APIに関連するDLLサポートをロードすることです。これは、それなしでは正しく実行されません。上記のコードと関数の実装は、JDK8 64ビットとOPENCVバージョン3.2に基づいています。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。