Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在对象周围绘制边界,对象位于图像内部_Ios_Swift_Opencv_Computer Vision_Contour - Fatal编程技术网

Ios 在对象周围绘制边界,对象位于图像内部

Ios 在对象周围绘制边界,对象位于图像内部,ios,swift,opencv,computer-vision,contour,Ios,Swift,Opencv,Computer Vision,Contour,我试图在一个物体周围画一个边界,比如说,在这个例子中,一个病变物体在一个没有太多噪声的普通背景下的图像中。我拍摄了图像并读取了像素值 并尝试使用活动轮廓算法沿对象边界计算XY坐标,但绘制的边界位于整个图像的边缘,而不是沿对象内部的边界,我无法更好地获得良好的坐标。所以,你们能不能建议我,是否有更好的方法来找到/绘制图像中对象周围的边界,或者我应该更好地使用openCV和Xcode来制作ios应用程序?敬请建议。我还没有尝试使用OpenCV的活动轮廓,但事实上,您在图像边缘有接近黑色和接近白色的轮

我试图在一个物体周围画一个边界,比如说,在这个例子中,一个病变物体在一个没有太多噪声的普通背景下的图像中。我拍摄了图像并读取了像素值


并尝试使用活动轮廓算法沿对象边界计算XY坐标,但绘制的边界位于整个图像的边缘,而不是沿对象内部的边界,我无法更好地获得良好的坐标。所以,你们能不能建议我,是否有更好的方法来找到/绘制图像中对象周围的边界,或者我应该更好地使用openCV和Xcode来制作ios应用程序?敬请建议。

我还没有尝试使用OpenCV的活动轮廓,但事实上,您在图像边缘有接近黑色和接近白色的轮廓可能没有帮助

在上面的评论部分提供了输入图像

这是一个opencv+python原型

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('skin.png')
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
red = rgb_img[:,:,0]
height, width, channels = rgb_img.shape
创建遮罩并应用整体填充

mask = np.zeros((height+2, width+2), np.uint8)
flooded = red.copy()

flags = 4 | cv2.FLOODFILL_MASK_ONLY
cv2.floodFill(flooded, mask, (8, 8), 1, 2, 2, flags)
plt.imshow(1-mask)
plt.colorbar()
plt.show()
有点形态学上的清理

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7))
omask = cv2.morphologyEx(1-mask, cv2.MORPH_OPEN, kernel)
plt.imshow(omask)
plt.colorbar()
plt.show()
查找等高线:

contours, hierarchy = cv2.findContours(omask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE )
查找最大面积等高线:

largest_contour = []
largest_area = 0
for contour in contours:
    area = cv2.contourArea(contour)
    if area > largest_area:
        largest_area = area
        largest_contour = contour
显示结果选择矩形和轮廓:

x,y,w,h = cv2.boundingRect(largest_contour)
cv2.drawContours(rgb_img, [largest_contour], -1, (0, 128, 128), 3)
cv2.rectangle(rgb_img, (x,y), (x+w, y+h), (0, 0, 0), 2)
plt.imshow(rgb_img)
plt.show()

这是一个非常简单明了的解决方案,但并不完美。它可以以计算复杂度或其他技术为代价进行改进。

您可以发布一张示例图像吗?查看您为解决问题而尝试的代码也会很有用。太好了。示例图像,我正试图在图像中的对象周围绘制边界:代码,为了更好地查看,我已将其上传到dropbox中。我尝试使用活动轮廓算法方程沿图像内对象的边界检测XY坐标。代码链接,swift文件:活动轮廓方法是否存在一个常见错误,即它给出了错误的XY坐标?边界应该有多紧?你期望实际的细分吗?边界框?介于两者之间?我现在不寻求准确性。任何靠近图像的边界都会对我有帮助。我们可以在聊天时进行简短的讨论吗?我想获得信息来推动我的工作,但从事这项工作的人确实很少。