我正在尝试制作一个打开图像的程序,扫描它的圆形/圆形并返回坐标,以便我可以使用该cv.Circle
功能在检测到的圆上绘制圆圈.
我的问题是:如何使用cv.HoughCircles()
?获取图像中检测到的圆的坐标/半径?
使用这个页面,我发现了如何检测圆圈(这花了我很多时间才发现,因为我不理解像阈值这样的术语,而Python的OpenCV文档真的很差,几乎没有).不幸的是,在该页面上没有显示如何提取从CvMat
创建的每个圆圈中获取的信息.如何提取该信息/是否有其他方式(例如MemoryStorage()
)?
到目前为止这是我的代码:
import cv, opencv
def main():
im = cv.LoadImageM("Proba.jpg")
gray = cv.CreateImage(cv.GetSize(im), 8, 1)
edges = cv.CreateImage(cv.GetSize(im), 8, 1)
cv.CvtColor(im, gray, cv.CV_BGR2GRAY)
cv.Canny(gray, edges, 50, 200, 3)
cv.Smooth(gray, gray, cv.CV_GAUSSIAN, 9, 9)
storage = cv.CreateMat(im.rows, 1, cv.CV_32FC3)
cv.HoughCircles(edges, storage, cv.CV_HOUGH_GRADIENT, 2, gray.height/4, 200, 100)
# Now, supposing it found circles, how do I extract the information?
print storage.r
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
另外,HoughCircles
为了让我能够检测出真正的小圆圈(如屏幕上的3mm),最后两个参数需要具有什么值?
谢谢大家的时间和精力来帮助我! …
我正在尝试学习Android开发,我想知道如何从麦克风中捕获音频,然后更改音频中的声音,使其听起来更浓或更清晰等等.简而言之:如何录制和更改声音的参数?(在java中,当然)
我在我的一个Java项目中遇到了一个问题,导致错误.问题听起来如下:
我有两个数组.我们先将它们命名为Array和secondArray.在这种情况下,对象是由我创建的单独类.它工作,数组可以填充该类型的对象.
Object[] firstArray= new Object[];
Object[] secondArray = new Object[];
Run Code Online (Sandbox Code Playgroud)
现在,当我从第一个数组中获取一个元素,编辑它然后在第二个数组中复制它时,第一个数组中的对象也会被改变.
tempObj = firstArray[3];
tempObj.modifySomething();
secondArray[3] = tempObj;
Run Code Online (Sandbox Code Playgroud)
每当我这样做时,第一个数组的(在这种情况下)第3个元素(实际上是第4个)得到修改.我不想要这个.我希望第一个数组保持不变,未修改,我从第一个数组中提取然后修改的对象应存储在第二个数组中,以便第二个数组实际上是运行某些代码后的第一个数组.
PS即使我使用Array.get(Array,index)从第一个数组中获取元素然后修改它,该元素仍会在第一个数组中被修改.
希望你能理解我想说的话,如果是的话,请借给我一只手:)
谢谢!