我尝试过各种演示代码,如“opencv查找:轮廓”,模板匹配(效果不好,因为它无法检测到顶盖的旋转)
我发现最好的方法是将Canny边缘检测和Hough变换圆相结合,这样Canny边缘检测的输出结果可以是Hough变换圆的输入图像,结果如下。
不幸的是,并非所有圆圈都被检测到,如果我更改
for(int i=0; i
for (int i = 0; i < 24; i++) // 24 is the no. of cans
我将得到一个表达式:向量下标超出范围。我不知道为什么它只能检测到21个圆圈
源代码如下:-
using namespace cv;
using namespace std;
Mat src, src_gray;
int main()
{
Mat src1;
src1 = imread("cans.jpg", CV_LOAD_IMAGE_COLOR);
namedWindow("Original image", CV_WINDOW_AUTOSIZE);
imshow("Original image", src1);
Mat gray, edge, draw;
cvtColor(src1, gray, CV_BGR2GRAY);
Canny(gray, edge,50, 150, 3);
//50,150,3
edge.convertTo(draw, CV_8U);
namedWindow("Canny Edge", CV_WINDOW_AUTOSIZE);
imshow("Canny Edge", draw);
imwrite("output.jpg", draw);
waitKey(500);
/// Read the image
src = imread("output.jpg", 1);
Size size(932, 558);//the dst image size,e.g.100x100
resize(src, src, size);//resize image
/// Convert it to gray
cvtColor(src, src_gray, CV_BGR2GRAY);
/// Reduce the noise so we avoid false circle detection
GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2);
vector<Vec3f> circles;
/// Apply the Hough Transform to find the circles
HoughCircles(src_gray, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows / 8,200, 100, 0, 0);
/// Draw the circles detected
for (int i = 0; i < circles.size(); i++)
{
printf("are you um?\n");
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
// circle center
circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);
// circle outline
circle(src, center, radius, Scalar(255, 0, 255), 3, 8, 0);
}
// namedWindow("Hough Circle Transform Demo", CV_WINDOW_NORMAL);
imshow("Hough Circle Transform Demo", src);
line(src, Point(0, 288), Point(1024, 288), Scalar(225, 220, 225), 2, 8);
// middle line
line(src, Point(360, 0), Point(360, 576), Scalar(225, 220, 225), 2, 8);
//break cans into 4 by 4
line(src, Point(600, 0), Point(600, 576), Scalar(225, 220, 225), 2, 8);
// x, y
imshow("Lines", src);
imwrite("lineoutput.jpg", src);
waitKey(0);
return 0;
}
我正在尝试使用Python OpenCV和Hough变换算法检测表线并从图像中提取完整的表。我需要有每条线的所有坐标,目的是绘制相同比例的相同表格。我了解Hough变换的工作原理,并尝试在没有OpenCV的情况下实现它,但在大图像上速度非常慢。 这是来自示例OpenCV Hough Transfrom的代码 Canny边缘检测返回图像Canny边缘检测结果 但是检测的结果是豪斯变换的结果 我不知道
问题内容: 我想使用OpenCV 2.4.1软件包随附的Tutorial 2-Basic作为起点,使用Android版OpenCV检测椭圆。请注意,我的椭圆将是一个完美的photoshop之一。 据我了解,使用“ HoughCircles”只会找到完美的(或大约)圆,因此省略了椭圆。 任何帮助将不胜感激,因为我是OpenCV的初学者 到目前为止,这是我尝试过的 如果您认为更多信息可能有用,请告诉我
我正在使用OpenCV和Python在图像中查找圆。我能够使用OpenCV教程中的Hough圆变换代码找到圆。我想在圆心周围裁剪一个矩形。我没有能够得到正确的裁剪功能,并尝试了多种裁剪组合,要么得到了一个错误或图像的不正确部分。有人能说明我应该如何输入裁剪坐标吗?这就是我一直遇到的错误: 错误:(-215)大小。宽度 谢谢!
我需要一个我一直在工作的算法的帮助。我试图检测阈值图像中的所有线条,检测所有线条,然后只输出那些平行的线条。阈值图像输出我感兴趣的对象,然后我通过canny边缘检测器过滤该图像。然后,该边缘图像通过概率Hough变换。现在,我希望该算法能够检测任何图像中的平行线。我想通过检测所有直线的坐标并计算它们的斜率(然后是角度)来实现这一点。平行线必须具有相同或几乎相同的角度,这样我只能输出具有相同角度的线
我正在尝试使用opencv 4 android sdk检测矩形文档。首先,我试图通过查找轮廓来检测它,但它不适用于多色文档。您可以查看此链接以获得更好的想法:使用OpenCV4Android检测多色文档 我做了很多研究,发现可以用houghline变换来完成。所以我按照以下方法检测文档: 原始图像- 我对hough线变换所做的是: 从上面的水平线和垂直线列表中,我找到了以下交叉点: 从这四个交点我
缩放最常用的应用之一,就是在水平方向或垂直方向拉伸一个圆,把它变成椭圆。本节,我们将通过平移和横向上拉伸画布上下文,再绘制圆,来创建一个椭圆。 图4-10 圆变换为椭圆 绘制步骤 按照以下步骤,绘制一个椭圆: 1. 定义画布上下文: window.onload = function(){ var canvas = document.getElementById("myCanvas"); va