- 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/
这可能是一个非常全局化的问题,但我们开始吧: 我想知道如何制作像 Virtualbox 这样的轨迹栏。它们在底部有一个带有自定义颜色的轨迹栏,以显示您是否为虚拟系统分配了过多的 RAM。 现在我的问题
我想知道如何使我的第二个 trackbar.position 镜像与 trackbar1.position 方向相反。例如。范围从 1 到 100。 所以当TrackBar1.Position :=
我无法将 TTrackBar 拇指大小调整为更大的大小。看图: 我的左边有一个小拇指,我无法将其变大(但不能将 TrackBar 本身变大)。 所需的拇指尺寸显示在带有红色区域的图像上。 也许我可以以
TrackBar 控件的变化方向与它在被更改时应该的方向相反:向上翻页/向下翻页/向上箭头/向下箭头。 这里有详细介绍: Why does the Trackbar value decrease on
我在这里要做的是像 Windows XP 上的那样放下一个轨迹栏来更改分辨率:( http://puu.sh/7Li5h.png ) 我想设置特定的间隔/增量值,如上图所示。目前,实际栏下方的线条已经
我用 C# 在 Winform 项目上添加了一个轨迹栏。 mySlider.Minimum = 0; mySlider.Maximum = 200; mySlider.Value = 30; mySl
我的 WinForms 程序中有一个轨迹栏,通过移动它可以刷新一个巨大且耗时的方法。看看这段代码: trackBar_ValueChanged(object sender, EventArgs e)
我想用opencv做前景分割。我编写了带有轨迹条的代码,这样我就可以找到最佳的分割参数。执行代码时它会工作,图像显示时带有标记的轮廓等。但是当我尝试在轨迹栏上移动条时。我收到以下错误。 OpenCV(
部分代码: 锁定位图数据的函数: public static BitmapData LockData(Bitmap bitmap) { Rectangle bitmap
我对后台工作人员有疑问。我有一个 trackbar,当用户改变它的值时,一个新的 backgroundworker 就会启动。有一个包含所有后台 worker 的列表,当启动一个新的后台 worker
我只是想知道您是否可以帮我解决这个问题。 在我的程序中,我必须使用 paint 事件来绘制一条充当“炮塔”的线。我必须使用轨迹栏来选择我将“开火”这个炮塔的角度。我的问题是我不确定如何编写代码以便每次
我遇到了一个奇怪的问题,希望有人能给我解释一下,这样我以后就可以避免了。当我放置多个轨迹条(在我的例子中是 6 个)时,最后一个轨迹条要短得多。这是基本代码: import cv2 def nothi
如何在轨迹栏窗口上显示条的范围(最大、最小)和当前指向值?这是使用轨迹栏的示例。 # trackbar import cv2 import numpy as np def nothing(x):
如何禁用鼠标滚轮在轨迹栏上的值更改?在界面上向下滚动时,用户可能会错误地更改轨迹栏值我正在使用 Windows 窗体 c#。我找不到任何属性来阻止此事件.. 最佳答案 我解决了这个问题:使用正常的事件
我正在研究 Hough Circle 函数。基本上我可以使用 4 个参数来获得我想要的正确圆。 所以我想到要创建一个跟踪条来监视正在处理的图像的状态。 所以我这样修改了我的代码 #include #
我从 openCV documentation site 复制了 Harris 角点检测器的代码,但我想让轨迹栏及其输出出现在同一个窗口中,所以我将代码更新为 #include "stdafx.h"
我有一个任务说“使用轨迹栏选择三种颜色。将 Blob 涂成相应的颜色。” 我已经创建了轨迹栏,它们工作正常,但我该如何完成这项任务?不幸的是,他们在类里面没有给我们足够的信息来解决这个问题。 非常感谢
我想逐帧显示电影,并使用 Trackbars 对帧进行一些形态学操作。在创建相应的结构化元素之前,我需要指定其特征,例如长度、度数 和迭代次数 我的代码: import cv2 video = cv2
目前,我有许多用于更改图像值的 slider 。我正在为 slider 使用 OpenCV 轨迹栏,它对我的每个 slider 都有一个不同函数的回调。我想让我的 slider 回调指向一个回调函
我正在尝试使用 slider 来控制 HSV 掩蔽的下限和上限。我能够获得 slider ,但无法使其保持在我设置的位置;每次拉入新帧时,它都会回到零。 import numpy as np impo
我是一名优秀的程序员,十分优秀!