获取连通区域,jdk8,引入dcm4che-core-5.11.0.jar和opencv-320.jar
public static void getConnectedRegion() { try { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); File f = new File("F:\\dcm\\a\\00000002.DCM"); int[]huarray = DicomUtil.getHUArray(f); byte[]bwarray = new byte[huarray.length]; for (int i = 0; i < huarray.length; i++) { if (huarray[i]>-500) { bwarray[i]=127; }else { bwarray[i]=0; } } Mat src = new Mat(512, 512, CvType.CV_8U); src.put(0, 0, bwarray); //canny边缘检测 // Imgproc.Canny(src, dest, 100, 300); List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); Mat hierarchy = src.clone(); /** * CV_RETR_EXTERNAL = 0,//表示只检测外轮廓 CV_RETR_LIST = 1,//检测的轮廓不建立等级关系 CV_RETR_CCOMP = 2,//建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。 CV_RETR_TREE = 3,//建立一个等级树结构的轮廓。 CV_RETR_FLOODFILL = 4, */ int mode = Imgproc.RETR_EXTERNAL;// /** * CV_CHAIN_APPROX_NONE = 1,//存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1 CV_CHAIN_APPROX_SIMPLE = 2,//压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息 CV_CHAIN_APPROX_TC89_L1 = 3,//使用teh-Chinl chain 近似算法 CV_CHAIN_APPROX_TC89_KCOS = 4,//使用teh-Chinl chain 近似算法 */ int method = Imgproc.CHAIN_APPROX_NONE; Imgproc.findContours(src, contours, hierarchy, mode, method); System.out.println("Contours size:"+contours.size()); System.out.println("hierarchy size:"+hierarchy.size()); List<Color> colorList = new ArrayList<Color>(); // colorList.add(new Color(255, 255, 255)); colorList.add(new Color(0, 255, 255)); colorList.add(new Color(255, 0, 255)); colorList.add(new Color(255, 255, 0)); colorList.add(new Color(0, 0, 255)); colorList.add(new Color(255, 0, 0)); colorList.add(new Color(0, 255, 0)); colorList.add(new Color(0, 0, 0)); BufferedImage bi = new BufferedImage(512, 512, BufferedImage.TYPE_INT_RGB); Mat dest = src.clone(); for(int i=0;i<contours.size();i++) { //TODO 输出区域 if (false) { int index_color = i%colorList.size(); int rgb = colorList.get(index_color).getRGB(); Scalar color = new Scalar(rgb); Imgproc.drawContours(dest, contours, i, color); } //输出轮廓 if (true) { MatOfPoint mp = contours.get(i); List<Point> pointList = mp.toList(); // System.out.println(pointList.size()); int point_size = pointList.size(); if (point_size>100) { int sum_x = 0; int sum_y = 0; int index_color = i%colorList.size(); int rgb = colorList.get(index_color).getRGB(); for (Point point : pointList) { // System.out.println(point.x+"="+point.y); int x = new Double(point.x).intValue(); int y = new Double(point.y).intValue(); bi.setRGB(x,y,rgb); sum_x+=x; sum_y+=y; } System.out.println(sum_x/point_size); System.out.println(sum_y/point_size); System.out.println("==="); } } } // Imgcodecs.imwrite("F:\\dcm\\image\\5.jpg", dest); ImageIO.write(bi, "jpg", new File("F:\\dcm\\image\\2.jpg")); } catch (Exception e) { e.printStackTrace(); } }
<audio controls="controls" style="display: none;"></audio>
相关推荐
在图像处理和计算机视觉领域,获取连通区域是至关重要的一步,它可以帮助我们识别和分割图像中的对象。本篇文章将深入探讨如何使用OpenCVSharp获取连通区域,判断点是否在轮廓内,以及如何获得外接矩形,并简要介绍...
接着,我们可以利用`regionprops`函数获取连通区域的各种属性,如面积、周长、质心等。这些属性可以帮助我们理解图像的结构和特性。例如,`stats = regionprops(labelmatrix, 'Area', 'Perimeter')`将返回一个结构...
### MATLAB连通区域提取知识点详解 #### 一、连通区域的基本概念 在数字图像处理领域,连通区域是指由相同或相似像素值组成的、在空间上相邻的像素集合。通常,连通区域用于图像分割、特征提取等任务中。根据像素间...
通过精确计算连通区域的面积和周长,我们可以获取到关于图像对象的量化信息,这对理解和分析图像内容至关重要。 该项目提供的源代码("标识物体测量面积周长")很可能包含了实现上述功能的算法和函数,可以作为...
在`MaxAreaFromSource`函数中,可能通过`connectedComponentsWithStats`获取连通区域的统计信息,找到具有最大面积的区域,然后更新目标图像`dstImage`,可能标记或突出显示这个区域。 总结来说,这个实例展示了...
### 基于OpenCV找到最大连通区域函数 #### 概述 在图像处理领域,提取最大连通区域是一项非常实用的技术,特别是在二值化图像处理中,它可以帮助我们定位并聚焦于图像中的主要对象或特征。OpenCV(开源计算机视觉...
此外,还可以使用`regionprops`函数来获取每个连通区域的属性,如面积、周长、中心点等。 连通区域标记在许多应用场景中有用,比如分割图像、识别目标、追踪运动物体等。通过理解并应用`bwlabel`函数以及类似的概念...
% 获取每个连通区域的面积 [maxArea, maxIndex] = max([stats.Area]); % 找到最大面积 maxConnectedComponent = labeledImage == maxIndex; % 提取最大连通区域 ``` 在这个例子中,`stats`是一个结构数组,包含了...
根据给定的文件信息,我们可以总结出以下关于“连通区域内目标的最小外接...综上所述,通过OpenCV库,我们可以有效地实现对图像中连通区域的最小外接矩形的计算及其长宽的获取。这一技术在多个领域都有广泛的应用前景。
这里使用了`RETR_CCOMP`模式来获取所有连通区域及其嵌套信息,`CHAIN_APPROX_SIMPLE`则用于简化轮廓点信息。 ##### 5. 计算连通区域重心 最后,遍历检测到的所有连通区域,并计算它们的重心坐标。OpenCV提供了一个...
该方法首先对获取的棒材图像进行灰度化、滤波和图像分割处理,然后对分割图像中的连通区域分类:小于基本面积的区域视为噪声区域,介于基本面积和阈值面积之间的区域视为一支棒材区域,大于阈值面积的区域表示多支棒材...
使用`connectedComponentsWithStats`可以获取更详细的统计信息,如每个连通区域的面积、质心等。 cvblob是一个基于OpenCV的扩展库,专门用于处理图像中的对象检测和跟踪。它提供了一个友好的接口来处理连通区域,...
通过调用regionprops(L, properties),可以获取连通区域的统计信息。例如,'Area'代表区域的像素数量,'BoundingBox'给出包含区域的最小矩形,'Centroid'是区域的质心。 4. **理论依据**: - **应用背景与意义**:...
本资源提供的"基于连通区域的图像分割matlab源码"是一个实现这一功能的MATLAB程序,特别适用于从树叶图像中识别和提取害虫等小目标的轮廓和纹理特征。 图像分割通常涉及像素级的操作,通过对像素的灰度值、色彩或者...
可以使用`regionprops`来获取连通区域的属性,如面积、周长等。 6. **模板匹配**: 对于候选的车牌区域,可以使用模板匹配方法(如`normxcorr2`)来验证是否符合标准车牌的特征。 7. **字符分割**: 一旦识别出...
Blob检测是一种寻找并标识这些连通区域的技术,广泛应用于物体识别、图像分割、模式识别等场景。本节将详细介绍基于游程链的连通区域标记的图像连通域(Blob)C++实现,以及与OpenCV的连通域实现方式的区别。 游程...
- `regionprops`:获取连通区域的属性,如面积、周长、中心等。 - `imsegm`:图像分割工具箱,包括水平集、自适应阈值等方法。 6. **图像变换与几何校正** - `imtransform`:进行仿射、透视、缩放等几何变换。 ...
标题中的"BOLB算法"是一种图像处理方法,用于分析图像中的连通区域,这在计算机视觉和图像分析领域中非常重要。图像连通区域是指在图像中像素值相同且相邻的一组像素,它们可能是物体的一部分或者整个物体。通过分析...
- `regionprops`:获取连通区域的各种属性,如面积、周长等。 7. 边缘检测 - `edge`函数:应用Canny、Sobel、Prewitt等算法检测图像边缘。 - `hough`和`houghpeaks`:霍夫变换用于检测直线或圆。 8. 颜色空间...