!続・OpenCV [OpenCV+Java+カメラ|http://www.wasamon.net/miyo/index.cgi?page=Diary%2F2016%2D4%2D10]に引き続いて OpenCVを使ってWebカメラで撮像した映像に対してエッジ検出. ついでに元画像とのオーバーレイも試してみるなど. こんな感じ. * オリジナル {{ref_image original.png}} * Cannyでエッジ検出 {{ref_image canny.png}} * エッジ部分を赤にしてオーバオレイ {{ref_image canny_overlay.png}} * ちなみに,エッジ検出画像を反転してみたもの {{ref_image canny_inv.png}} ソースコードはこんな感じ.{{ref EdgeDetect.java}} capture.read(webcam_image); で撮ったカメラ画像を Imgproc.cvtColor(webcam_image, dest_img, Imgproc.COLOR_BGR2GRAY); で白黒化して, Imgproc.Canny(dest_img, canny_img, 50, 200); で,Cannyを使ってエッジ検出.エッジ検出で得られた部分が白に. Imgproc.cvtColor(canny_img, canny_bgr_img, Imgproc.COLOR_GRAY2BGR); で,元の画像(webcam_image)にあわせてBGR化して, canny_color_img.copyTo(webcam_image, canny_bgr_img); で,canny_bgr_imgの黒じゃない部分(エッジ部分)にだけ webcam_imageの上にcanny_color_imgを上書き. 自分の顔を撮像してみるのも,結構楽しい. {{ref_image my_face_canny.png}} メガネ越しでの顔の輪郭のゆがみがよくみえる. ちなみに,MacOSXだと,-Djava.library.pathの指定が必要. java -cp /usr/local/share/OpenCV/java/opencv-310.jar:. \ -Djava.library.path=/usr/local/share/OpenCV/java/ \ EdgeDetect とか.