霍夫变换 OPENCV C++
Hough Transformation OPENCV C++
http://inside.mines.edu/~whoff/courses/EENG512/lectures/HoughInOpenCV.pdf
你好,我正在阅读上面 link 中的 pdf 教程。
我在幻灯片的第 6 页遇到问题。
正如我们所见,插入 canny 边缘检测器后代码的输出,它应该描绘出照片上的所有边缘。
我看不到第 6 页显示的内容。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
printf("Hello world\n");
// read an image
Mat imgInput = imread("a.png");
// create image window named "My Image"
namedWindow("My Image");
// Convert to gray if necessary
if (imgInput.channels() == 3)
cv::cvtColor(imgInput, imgInput, CV_BGR2GRAY);
// Apply Canny edge detector
Mat imgContours;
double thresh = 105; // try different values to see effect
Canny(imgInput, imgContours, 0.4*thresh, thresh); // low, high threshold
// show the image on window
imshow("My Image", imgInput);
// wait for xx ms (0 means wait until keypress)
waitKey(5000);
return 0;
}
还有,还有一行double thresh = xxx;//try different values
我应该输入什么值?这些值是什么意思?
谢谢
imgContours 是包含所有边的输出图。您应该将 imshow 与 imgContours 一起使用。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
printf("Hello world\n");
// read an image
Mat imgInput = imread("a.png");
// create image window named "My Image"
namedWindow("My Image");
// Convert to gray if necessary
if (imgInput.channels() == 3)
cv::cvtColor(imgInput, imgInput, CV_BGR2GRAY);
// Apply Canny edge detector
Mat imgContours;
double thresh = 105; // try different values to see effect
Canny(imgInput, imgContours, 0.4*thresh, thresh); // low, high threshold
// show the image on window
imshow("My Image", imgContours);
// wait for xx ms (0 means wait until keypress)
waitKey(5000);
return 0;
}
参考:
http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=canny#canny
只需将您的 imshow
函数替换为 ,
imshow("My Image", imgContours);
并且您可以使用大约 200
左右的 thresh
值。
改变阈值并查看它的效果,根据它你可以select你的阈值。
http://inside.mines.edu/~whoff/courses/EENG512/lectures/HoughInOpenCV.pdf
你好,我正在阅读上面 link 中的 pdf 教程。
我在幻灯片的第 6 页遇到问题。
正如我们所见,插入 canny 边缘检测器后代码的输出,它应该描绘出照片上的所有边缘。
我看不到第 6 页显示的内容。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
printf("Hello world\n");
// read an image
Mat imgInput = imread("a.png");
// create image window named "My Image"
namedWindow("My Image");
// Convert to gray if necessary
if (imgInput.channels() == 3)
cv::cvtColor(imgInput, imgInput, CV_BGR2GRAY);
// Apply Canny edge detector
Mat imgContours;
double thresh = 105; // try different values to see effect
Canny(imgInput, imgContours, 0.4*thresh, thresh); // low, high threshold
// show the image on window
imshow("My Image", imgInput);
// wait for xx ms (0 means wait until keypress)
waitKey(5000);
return 0;
}
还有,还有一行double thresh = xxx;//try different values
我应该输入什么值?这些值是什么意思?
谢谢
imgContours 是包含所有边的输出图。您应该将 imshow 与 imgContours 一起使用。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
printf("Hello world\n");
// read an image
Mat imgInput = imread("a.png");
// create image window named "My Image"
namedWindow("My Image");
// Convert to gray if necessary
if (imgInput.channels() == 3)
cv::cvtColor(imgInput, imgInput, CV_BGR2GRAY);
// Apply Canny edge detector
Mat imgContours;
double thresh = 105; // try different values to see effect
Canny(imgInput, imgContours, 0.4*thresh, thresh); // low, high threshold
// show the image on window
imshow("My Image", imgContours);
// wait for xx ms (0 means wait until keypress)
waitKey(5000);
return 0;
}
参考:
http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=canny#canny
只需将您的 imshow
函数替换为 ,
imshow("My Image", imgContours);
并且您可以使用大约 200
左右的 thresh
值。
改变阈值并查看它的效果,根据它你可以select你的阈值。