- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 Hough Circle 函数。基本上我可以使用 4 个参数来获得我想要的正确圆。
所以我想到要创建一个跟踪条来监视正在处理的图像的状态。
所以我这样修改了我的代码
#include <sstream>
#include <string>
#include <iostream>
#include <vector>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
//Create a window for trackbars
namedWindow("Trackbar Window", CV_WINDOW_AUTOSIZE);
//Create trackbar to change brightness
int iSliderValue1 = 50;
createTrackbar("Brightness", "Trackbar Window", &iSliderValue1, 100);
//Create trackbar to change contrast
int iSliderValue2 = 50;
createTrackbar("Contrast", "Trackbar Window", &iSliderValue2, 100);
int param1 = 10;
createTrackbar("param1", "Trackbar Window", ¶m1, 300);
int param2 = 10;
createTrackbar("param2", "Trackbar Window", ¶m2, 300);
Mat src;
VideoCapture capture;
capture.open("movingBall.wmv");
capture.read(src);
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
if (!src.data) {
std::cout << "ERROR:\topening image" << std::endl;
return -1;
}
cv::namedWindow("image1", CV_WINDOW_AUTOSIZE);
cv::namedWindow("image2", CV_WINDOW_AUTOSIZE);
while (true){
capture.read(src);
Mat dst;
int iBrightness = iSliderValue1 - 50;
double dContrast = iSliderValue2 / 50.0;
src.convertTo(src, -1, dContrast, iBrightness);
cv::imshow("image1", src);
Mat src_gray2;
cvtColor(src, src_gray2, CV_BGR2GRAY);
GaussianBlur(src_gray2, src_gray2, cv::Size(9, 9), 2, 2);
vector<Vec3f> circles;
HoughCircles(src_gray2, circles, CV_HOUGH_GRADIENT,
2, // accumulator resolution (size of the image / 2)
5, // minimum distance between two circles
param1, // Canny high threshold
param2, // minimum number of votes
0, 0); // min and max radius
std::cout << circles.size() << std::endl;
std::cout << "end of test" << std::endl;
for (size_t i = 0; i < circles.size(); i++)
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);
// circle outline
circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);
}
/*std::vector<cv::Vec3f>::
const_iterator itc = circles.begin();
while (itc != circles.end()) {
cv::circle(src_gray2,
cv::Point((*itc)[0], (*itc)[1]), // circle centre
(*itc)[2], // circle radius
cv::Scalar(0,0,0), // color
2); // thickness
++itc;
}*/
cv::imshow("image2", src_gray2);
cvWaitKey(33);
}
return 0;
}
如 Hough Circle 函数所示,我使用 int param1;
作为我希望更改的值。但是,代码没有语法错误,但无法编译。我想知道我的轨迹栏设置是否有问题..谢谢
最佳答案
我在这里使用 Python 尝试过,您可以尝试从中移植...
import cv2
import numpy as np
img = cv2.imread('C:/Python34/images/2.jpg',0)
cv2.namedWindow('image')
def nothing(x):
pass
cv2.createTrackbar('Param 1','image',0,100,nothing)
cv2.createTrackbar('Param 2','image',0,100,nothing)
switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image',0,1,nothing)
while(1):
cv2.imshow('image',img)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
#To Get Parameter values from Trackbar Values
para1 = cv2.getTrackbarPos('Param 1','image')
para2 = cv2.getTrackbarPos('Param 2','image')
s = cv2.getTrackbarPos(switch,'image')
if s == 0:
cv2.imshow('image', img)
else:
#For finding Hough Circles according to trackbar parameters
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,para1,para2,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
#For drawing Hough Circles
for i in circles[0,:]:
cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),2)
cv2.circle(img,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('image', img)
cv2.waitKey(0)
img = cv2.imread('C:/Python34/images/2.jpg',0)
cv2.destroyAllWindows()
您可以使用上面的代码作为引用,首先它为开关创建一个窗口和轨迹栏,为霍夫圆创建两个参数。然后在 while 循环中,para1 和 para2 会将轨迹栏的位置存储为 canny 参数的值。然后在 cv2.HoughCircles 函数中使用它并绘制圆圈。再次加载图像,以便每次更改参数时都会在新图像上给出输出以避免混淆。
希望这可能有用。
关于c++ - opencv HoughCircle 和 trackbar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32647897/
目录 1. 效果图 2. 源码 参考 这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,OpenCV使用cv2.HoughCircles()实现霍夫圆变
我正在尝试使用 android-opencv 2.3.1 来识别图像中的圆圈(硬币)。然而,执行方法 Imgproc.cvtColor 时发生错误(org.opencv.cvException)。 F
有没有一种方法可以使圆检测无参数? - 为什么 cv2.HoughCircles() 中的参数在更改后有时不会受到影响?我有一个 for 循环来改变参数,但它不会一直影响结果。 Hough Circl
通过将图像转换为灰度然后对其进行模糊处理来处理图像后,我尝试使用这些参数应用霍夫圆变换: CV_HOUGH_GRADIENT dp = 1 最小距离 = 1 参数_1 = 70 参数_2 = 100
我正在使用 Xcode 和 C++ 我已经从 OpenCV documentation 中复制了 HoughCircles 代码: #include #include #include usin
我试图在我的图像中检测包含圆点的圆圈,但不幸的是我无法这样做。我正在使用 opencv HoughTransform,但找不到使它起作用的参数。 src = imread("encoded.jpg",
我试图使用 OpenCV HoughCircles 函数,但我得到了这个错误。 这是我的代码: rows = image.shape[0] circles = cv2.HoughCircles(out
我正在使用 float32 类型的 128 x 128 数组。这些数组是从二进制文件中提取的,我试图在每个数组中定位磁盘。 当我尝试使用 HoughCircles 示例代码时: img = Image
我正在编写一个脚本来自动检测一组照片上的一些圆圈。我可能已经阅读了有关 HoughCircles on Stack 的所有问题,推荐的方法通常似乎是蛮力半径间隔和累加器阈值(即 param2)。半径循
我试图在图像中定位一些彩色球,为了减少误报的风险,我首先根据当前正在搜索的球的颜色将图像缩小为二值图像。 OpenCV 的 HoughCircles 无法在二值图像中找到任何圆圈, 同时在转换为灰度的
我正在检测图像中的循环 这是我的代码: import cv2 import cv2.cv as cv import numpy as np img = cv2.imread('a1.png',0) i
我使用 OpenCV 帮助我检测从 iPhone 相机拍摄的图像中的硬币。我正在使用 HoughCircles 方法帮助我找到它们,但结果并不乐观。 cv::Mat greyMat; cv::
我刚刚在 opencv 上学习了一个关于圆圈检测的例子 http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_circle/hough
我无法在图像上绘制圆圈。你能检查一下吗?问题出在绘制圆圈时,我无法检索在图像上找到的圆圈的半径和中心。提前致谢。 代码:(Python) import cv,cv2 import numpy as n
我在 Anaconda Navigator 上使用“OpenCV 版本:3.4.0”和 Python 3.6 以及 Spyder IDE (Spyder 3.2.4)。 当我使用这些参数调用 Houg
我正在实现一个函数来检测图像中的圆圈。我正在使用 Java 的 OpenCV 来识别圆圈。灰度图像确实显示了一个圆圈。 这是我的代码: Mat gray = new Mat(); Imgproc.cv
我需要进行快速准确的圆检测,所以我认为使用 OpenCV 的 Hough Circle 是一个不错的选择。不幸的是,无论我给它的图像有多好以及我调整了多少参数,它都拒绝检测图像中的所有圆圈。这是我的输
我正在尝试使用 OpenCV,更具体地说是它的 HoughCircles 来检测和测量瞳孔和虹膜,目前我一直在使用函数中的一些变量,因为它要么返回 0 个圆圈,要么返回过多的圆圈.下面是我正在使用的代
我想使用 OpenCV 和 C++ 检测图像中的圆圈。我可以通过引用 official documentation 来做到这一点调整OpenCV Team编写的那段代码的参数。 所以,我正在使用的代码
我有一个包含 5 个油滴的视频,我正在尝试使用 cv2.HoughCircles 来找到它们。 这是我的代码: import cv, cv2 import numpy as np foreground
我是一名优秀的程序员,十分优秀!