Loading... 配合写个自动盖章的小项目,目的要收到命令,打开摄像头,拍照,识别其中的条形码返回坐标点,存图,因为要放在web程序中,这两年一直在做java和[opencv](https://so.csdn.net/so/search?q=opencv&spm=1001.2101.3001.7020)的相关项目,所以直接选择了javacv,opencv版本是2.4.8,javacv是javacv-0.7-bin,安装我参考的博客是这两篇。 [http://blog.csdn.net/huangjing0220/article/details/45131279](http://blog.csdn.net/huangjing0220/article/details/45131279) [http://blog.csdn.net/haoba1987/article/details/8175390](http://blog.csdn.net/haoba1987/article/details/8175390) 注意一定要对好版本号,我试了javacv0.6版本的就没成功,换成0.7就哦了,还有引入库的位数要和opencv一致,比如我就都是64位,最后opencv要放在C盘,注意好这三点,我花了小半天去搞这些东西,郁闷死,别走弯路 因为打开摄像头拍照存图这事比较简单, 本篇博客只关注条形码识别,条形码识别是有现成例子的,我参考的博客如下地址,他使用的Python,其实我就相当于翻译成了javacv而已。不多说了 ,直接公布代码吧,可能识别效果有一点小出入,因为时间特别紧,我没仔细调参。 [http://www.cnblogs.com/pmars/p/4143158.html](http://www.cnblogs.com/pmars/p/4143158.html) import的类大家自己填上,我不写了,浪费空间,直接上函数 ```html hljs language-xml public BarCodePoint getBarCodeCoordinate(IplImage image){ BarCodePoint p = new BarCodePoint(); IplImage gray = IplImage.create(image.width(),image.height(), IPL_DEPTH_8U, 1);//IPL_DEPTH_8U IplImage destimgX = IplImage.create(image.width(),image.height(), IPL_DEPTH_32F, 1); IplImage destimgY = IplImage.create(image.width(),image.height(), IPL_DEPTH_32F, 1); IplImage gradient = IplImage.create(image.width(),image.height(), IPL_DEPTH_32F, 1); IplImage sobel_result = IplImage.create(image.width(),image.height(), IPL_DEPTH_8U, 1); cvCvtColor(image, gray, CV_RGB2GRAY); cvSobel(gray,destimgX,1,0,-1);//x方向的边缘 cvSobel(gray,destimgY,0,1,-1);//y方向的边缘 cvSub(destimgX, destimgY, gradient, null); cvConvertScaleAbs(gradient, sobel_result,1,0); IplImage blurred_result = IplImage.create(image.width(),image.height(), IPL_DEPTH_8U, 1); cvSmooth(sobel_result, sobel_result, CV_BLUR , 9); cvThreshold( sobel_result , blurred_result, 225, 255,CV_THRESH_BINARY ); IplImage Morphology_result = IplImage.create(image.width(),image.height(), IPL_DEPTH_8U, 1); IplConvKernel kernelCross = cvCreateStructuringElementEx(21, 21,7,7, CV_SHAPE_RECT, null); cvMorphologyEx(blurred_result, Morphology_result, Morphology_result, kernelCross, MORPH_CLOSE, 1); IplImage erosion_dst = IplImage.create(image.width(),image.height(), IPL_DEPTH_8U, 1); IplImage dilate_dst = IplImage.create(image.width(),image.height(), IPL_DEPTH_8U, 1); IplConvKernel kernel=cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_RECT,null); cvErode( Morphology_result, erosion_dst, kernel,9); cvDilate( erosion_dst, dilate_dst, kernel,4); IplImage resultImage = cvCloneImage(dilate_dst); CvMemStorage mem = CvMemStorage.create(); CvSeq contours = new CvContour(null); CvSeq ptr = new CvSeq(); cvFindContours(resultImage, mem, contours, Loader.sizeof(CvContour.class), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0)); CvRect boundbox; int[] arr = {0,0,0,0}; for (ptr = contours; ptr != null&& !ptr.isNull(); ptr = ptr.h_next()) { try { boundbox = cvBoundingRect(ptr, 0); if(boundbox.width()*boundbox.height()>arr[2]*arr[3]){ arr[0] = boundbox.x(); arr[1] = boundbox.y() ; arr[2] = boundbox.width() ; arr[3] = boundbox.height() ; } } catch (java.lang.Exception e) { System.out.println("null point"); e.printStackTrace(); } } cvRectangle( image , cvPoint( arr[0], arr[1] ), cvPoint( arr[0] + arr[2], arr[1] + arr[3]), cvScalar( 0, 255, 0, 0 ), 3, 0, 0 ); cvShowImage( "Contours", image ); p.setX(arr[0]); p.setY(arr[1]); cvWaitKey(0); cvReleaseImage(sobel_result); return p; } ``` 其中BarCodePoint是个类如下 ```html hljs language-xml public class BarCodePoint { private double x; private double y; public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } } ``` 写个测试类测试一下: ```html hljs language-xml public class Test { public static void main(String args[]) { IplImage image=cvLoadImage("H:\\1.jpg"); ImageProcess ip = new ImageProcess(); BarCodePoint bcp = new BarCodePoint(); bcp = ip.getBarCodeCoordinate(image); }} ``` 测试图片我直接选了参考博文的图片,如下图 ![](https://img-blog.csdn.net/20160729104416220?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 最后修改:2022 年 03 月 15 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏