Tag: 图像处理

OpenCV点目标检测未找到所有目标,并发现圆圈是偏移的

我正试图检测黑/白点目标的中心,就像在这张照片中一样。 我试过使用cv2.HoughCircles方法,但是1,我只能检测2到3个目标,2,当我将找到的圆绘制回图像时,它们总是略微偏移。 我使用了错误的方法吗? 我应该使用findContours还是完全不同的东西? 这是我的代码: import cv2 from cv2 import cv import os import numpy as np def showme(pic): cv2.imshow(‘window’,pic) cv2.waitKey() cv2.destroyAllWindows() im=cv2.imread(‘small_test.jpg’) gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) #I’ve tried blur,bw,tr… all give me poor results. blur = cv2.GaussianBlur(gray,(3,3),0) n,bw = cv2.threshold(blur,120,255,cv2.THRESH_BINARY) tr=cv2.adaptiveThreshold(blur,255,0,1,11,2) circles = cv2.HoughCircles(gray, cv.CV_HOUGH_GRADIENT, 3, 100, None, 200, 100, 5, 16) try: n = np.shape(circles) circles=np.reshape(circles,(n[1],n[2])) […]

OpenCV cvFindContours – 如何分离轮廓的组件

我一直在玩OpenCV,并且有很多试验和错误已经设法学习如何检测照片中的圆圈(硬币)。 一切都很好,除非我直接将硬币放在一起(如下所示,忽略了第二张图像倒置的事实)。 看来因为cvFindContours认为它们是同一个对象。 我的问题是如何将这些轮廓分成不同的对象,或者获取已经分离的轮廓列表。 我用于cvFindContours的参数是: cvFindContours( img, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0) ); 任何帮助或建议将不胜感激。

Contours opencv:如何消除二进制图像中的小轮廓

我目前正在从事图像处理项目。 我在VC ++中使用Opencv2.3.1。 我编写了这样的代码,输入图像被过滤为仅蓝色并转换为二进制图像。 二进制图像有一些我不想要的小物体。 我想消除那些小对象,所以我使用openCV的cvFindContours()方法来检测二进制图像中的轮廓。 但问题是我无法消除图像输出中的小物体。 我使用了cvContourArea()函数,但没有正常工作..,侵蚀function也无法正常工作。 所以请有人帮我解决这个问题.. 我获得的二进制图像 : 我想要获得的结果/输出图像 :

使用Chessboard进行OpenCV转换

我刚刚开始尝试使用OpenCV。 我有一个静态位置的LCD设置,我想从图像中提取屏幕上显示的内容。 我已经看到用于校准相机的棋盘图案,但似乎用于不影响图像,这不完全是我想要做的。 我想我会在液晶显示屏上显示棋盘,然后找出将液晶显示屏的图像转换成直接在头顶和裁剪的棋盘理想视图所需的转换。 然后我会存储转换,更改LCD显示的内容,拍照,执行相同的转换,并获得现在显示的内容的理想视图。 我想知道这听起来是个好主意吗? 有没有更简单的方法来实现我想要做的事情? 关于函数的任何提示我应该用来计算转换,执行它们,存储它们(可能只是将转换矩阵保存在内存中或将它们写入文件)等等?

OpenCV中的位移贴图filter

我很想知道如何使用OpenCV实现此处演示的效果 。 我认为它是某种位移贴图滤镜,但我不是100%肯定。 在该页面完全加载后,移动鼠标以查看背景图像移动(这是我正在寻找的效果)。 可能吗? 我该怎么做呢? 注意 :此处还有另一页显示相同的效果 。

使用鼠标从video上的矩形设置ROI

我有video,当程序运行时,video的第一帧被视为图像,并允许用户在图像上绘制矩形,在绘制矩形后,用户必须右键单击图像以确认矩形。 当鼠标右键单击时,图像消失,video开始播放,其上绘制的矩形。 我能够完美地绘制矩形,但我无法将该矩形设置为ROI。 我想要做的是将该矩形设置为感兴趣区域(ROI),以对该ROI进行一些图像处理。 我无法将我绘制的矩形设置为ROI。 我在Visual Studio 2010中使用OpenCV。稍后我将尝试将此程序集成到QT创建器中。 任何帮助,将不胜感激。 提前致谢。 我的完整代码如下: #include #include #include #include #include #include #include #include #include using namespace cv; using namespace std; void my_mouse_callback( int event, int x, int y, int flags, void* param ); bool destroy=false; CvRect box; IplImage* image; IplImage* frame2; bool drawing_box = false; void draw_box( IplImage* img, […]

OpenCV:处理每一帧

我想编写一个使用OpenCV进行video捕获的跨平台应用程序。 在所有示例中,我发现使用抓取function处理来自摄像机的帧并等待一段时间。 我想处理序列中的每一帧。 我想定义我自己的回调函数,每当新的框架准备好被处理时,它就会被执行(就像在Windows的directshow中,当您为了这些目的定义和放入图形时你自己的filter)。 所以问题是:我怎么能这样做?

如何在高海拔照片中有效地找到地平线?

我试图检测从高空拍摄的图像中的地平线,以确定相机的方向。 我也试图快速运行 – 理想情况下,我希望能够在Raspberry Pi上实时处理帧(即每秒几帧)。 到目前为止我采取的方法是基于这样一个事实:在高海拔地区,天空非常暗,如下: 我试过的是从整个图像中取样并将它们分成浅色和深色样本,并在它们之间画一条线。 然而,由于大气层的模糊性,这将地平线置于其实际位置之上: 这是我的代码(在Javascript中为了便于网络演示): function mag(arr) { return Math.sqrt(arr[0]*arr[0]+arr[1]*arr[1]+arr[2]*arr[2]) } // return (a, b) that minimize // sum_i r_i * (a*x_i+b – y_i)^2 function linear_regression( xy ) { var i, x, y, sumx=0, sumy=0, sumx2=0, sumy2=0, sumxy=0, sumr=0, a, b; for(i=0;i<xy.length;i++) { x = xy[i][0]; y = xy[i][2]; r = […]

快速跨平台C / C ++图像处理库

什么是用于图像处理的一些跨平台和高性能图像库(resize和查找颜色/色调直方图)。 不需要gui。 这适用于C / C ++。 到目前为止,我一直在寻找 OpenCV的 GIL是Boost的一部分 魔鬼 CIMG 我的问题 我上面列出的那些表现如何 还有什么其他的图书馆 您的意见非常感谢。

OpenCv 2.3 C – 如何隔离图像内的对象

我有一个像这样的图像: 我想删除数字周围的黑色行和列。 所以我想要的结果是: 我试试这个: void findX(IplImage* imgSrc,int* min, int* max){ int i; int minFound=0; CvMat data; CvScalar maxVal=cvRealScalar(imgSrc->width * 255); CvScalar val=cvRealScalar(0); //For each col sum, if sum < width*255 then we find the min //then continue to end to search the max, if sum< width*255 then is new max for (i=0; iwidth; i++){ cvGetCol(imgSrc, […]