USBウェブカメラからビデオストリームをキャプチャする必要があります。これには、Javaでの開発にOpencv 2.4.6を使用します。 こちら に記載されている手順に従います
「C:\ opencv\build\Java\x64」ディレクトリをシステムパスに追加し、Eclipseのライブラリに「opencv-246.jar」ファイルを含めます。あなたが炎を実行するとき
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
public class Main {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat m = Mat.eye(3, 3, CvType.CV_8UC1);
System.out.println("m = " + m.dump());
}
}
私は得る
m = [1, 0, 0;
0, 1, 0;
0, 0, 1]
OK =)
でも走るとき
import org.opencv.highgui.VideoCapture;
public class Main {
public static void main(String[] args) {
VideoCapture vc = new VideoCapture(0);
if(vc.isOpened()){
System.out.println("Works!");
}
}
}
私は得る
Exception in thread "main" Java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.n_VideoCapture(I)J
at org.opencv.highgui.VideoCapture.n_VideoCapture(Native Method)
at org.opencv.highgui.VideoCapture.<init>(VideoCapture.Java:113)
at Main.main(Main.Java:5)
私が含むすべてのルートを追加します:
C:\ opencv\build\x64\vc10
1つずつですが、機能しません。
最後に、C:\ opencv\build\x64\vc10でOPENCV_DIRと呼ばれる変数を作成しますが、それでもUnsatisfiedLinkErrorが発生します。
私を助けてください!
2番目の例では、この行をスキップしました
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
したがって、opencv libsはロードされませんでした、UnsatisfiedLinkErrorなど...
[編集]:
java.libraryパスの問題を強調表示してくれた@Jishnu Prathapに感謝します。その設定で問題が発生した場合でも、Java wrapper so/dll/dylib likeへの絶対パスを使用できます。 :
System.load("/path to/our/Java_wrapper");
JavaでOpenCVを使用しているときに同様のエラーが発生しました。解決するために2つのことを行いました。
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
opencv3.xを使用する一般ユーザー向け:
HighGUIモジュールは、Java)には存在しません。
import org.opencv.videoio.VideoCapture;
の代わりに
import org.opencv.highgui.VideoCapture;
videoioには、VideoCapture、VideoWriterが含まれています。
同様に:
imgcodecsにはimread/imwriteとその仲間が含まれます
例:
Highgui.imread(fileName)
->
Imgcodecs.imread(fileName)
以下のコードを試してください
import org.opencv.core.CvType; import org.opencv.core.Mat;
nu.pattern.OpenCVをインポートします。
パブリッククラスOpencvMain {
public static void main( String[] args )
{
OpenCV.loadLocally();
Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
System.out.println( "mat = " + mat.dump() );
}
}
だから、私もこの問題を抱えていて、あなたのすべての提案を実行しました。x64ウィンドウでは問題なく動作しましたが、x86では動作しませんでした。
ついに私は変更することで解決策を見つけました:
VideoCapture capture = new VideoCapture(0);
for
VideoCapture capture = new VideoCapture();
capture.open("resources/vid.MP4");
なぜこれが機能したのかはわかりませんが、同じ問題を抱えている誰かに役立つことを願っています。