#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { int startf = 39, endf = 512; // 视频帧的起始和结束帧号 // 读入背景图像 Mat Ibj = imread("D://yanyi//opencv//test//opencv1//BackgroundFrame.jpg", IMREAD_GRAYSCALE); for (int i = startf; i <= endf; i++) // 遍历视频帧 { // 读入当前视频帧并转化为灰度图像 Mat I1 = imread("frame" + to_string(i) + ".jpg"); Mat gray; cvtColor(I1, gray, COLOR_BGR2GRAY); // 将灰度图像转换为双精度浮点型并减去背景图像 gray.convertTo(gray, CV_64F); gray -= Ibj; // 对图像进行二值化处理 Mat bw1; threshold(gray, bw1, 25, 255, THRESH_BINARY); // 对二值化图像进行形态学开运算 Mat bwAreaOpenBW; morphologyEx(bw1, bwAreaOpenBW, MORPH_OPEN, getStructuringElement(MORPH_RECT, Size(3, 3))); // 对二值化图像进行连通组件分析 Mat labels; if (bwAreaOpenBW.depth() != CV_8U && bwAreaOpenBW.depth() != CV_8S) { bwAreaOpenBW.convertTo(bwAreaOpenBW, CV_8U); // or CV_8S } int n = connectedComponents(bwAreaOpenBW, labels, 8, CV_16U); // 遍历每一个连通组件 for (int j = 1; j < n; j++) { // 提取连通组件中的像素点 Mat mask = labels == j; vector<Point> points; findNonZero(mask, points); // 构建矩阵并求解线性方程组 Mat X(points.size(), 2, CV_64F); for (int k = 0; k < points.size(); k++) { X.at<double>(k, 0) = points[k].x; X.at<double>(k, 1) = points[k].y; } Mat Y(points.size(), 1, CV_64F); for (int k = 0; k < points.size(); k++) { Y.at<double>(k, 0) = points[k].y; } Mat coef; solve(X, Y, coef, DECOMP_SVD); // 计算轴的两个端点的坐标 double b1 = coef.at<double>(0, 0); double b2 = coef.at<double>(1, 0); double minzhi = points[0].x; double maxzhi = points[0].x; for (int k = 1; k < points.size(); k++) { if (points[k].x < minzhi) { minzhi = points[k].x; } if (points[k].x > maxzhi) { maxzhi = points[k].x; } } double duan1x = b1 + b2 * minzhi; double duan1y = minzhi; double duan2x = b1 + b2 * maxzhi; double duan2y = maxzhi; // 在图像上绘制轴的两个端点 circle(I1, Point(duan1x, duan1y), 3, Scalar(0, 0, 255), -1); circle(I1, Point(duan2x, duan2y), 3, Scalar(0, 0, 255), -1); } // 显示处理结果并等待用户按键 imshow("result", I1); waitKey(1); } return 0; }没有绘制出端点是怎么回事
时间: 2024-01-18 14:04:34 浏览: 33
在您的代码中,绘制了轴的两个端点,但是没有将它们绘制在原始图像上,而是绘制在处理结果I1上。因此,当最后显示处理结果时,只显示了处理结果I1,而没有显示原始图像。
要绘制端点并显示在原始图像上,可以将绘制端点的代码移动到以下位置:
```
// 在图像上绘制轴的两个端点
circle(I1, Point(duan1x, duan1y), 3, Scalar(0, 0, 255), -1);
circle(I1, Point(duan2x, duan2y), 3, Scalar(0, 0, 255), -1);
// 显示处理结果并等待用户按键
imshow("result", I1);
waitKey(1);
```
在这个位置上,绘制了端点后,将它们显示到了原始图像I1中,而不是处理结果I1。
请注意,此代码只绘制了端点,并没有将它们连接成一条直线。如果您希望画出直线,请尝试使用cv::line函数。
相关问题
#include<opencv2/opencv.hpp>
`#include<opencv2/opencv.hpp>` 是OpenCV(Open Source Computer Vision Library)库中的一个头文件,它包含了OpenCV的基本功能和类型定义。OpenCV是一个广泛使用的计算机视觉和机器学习库,用于图像和视频处理。
当你在C++项目中使用 `#include<opencv2/opencv.hpp>` 时,你引入了OpenCV的基本接口,使得你可以使用其丰富的图像处理和计算机视觉函数,如读取、显示、处理图像、特征检测等。
以下是一个简单的示例,展示了如何使用OpenCV来加载并显示一张图片:
```cpp
#include <opencv2/opencv.hpp> // 引入OpenCV库
int main()
{
// 读取图片
cv::Mat img = cv::imread("path_to_your_image.jpg"); // 使用 imread 函数
// 检查图片是否成功加载
if(img.empty())
{
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
// 显示图片
cv::imshow("Image", img); // 使用 imshow 显示图片
cv::waitKey(0); // 等待用户按键
return 0;
}
```
#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc_c.h>
这段代码是C++程序的头文件引用部分,它包含了所需的库文件和命名空间。具体来说:
- `#include <iostream>`:引用了标准输入输出流库,提供了基本的输入输出功能。
- `#include <opencv2/opencv.hpp>`:引用了OpenCV库的主要头文件,包含了大部分OpenCV的函数和数据类型。
- `#include <opencv2/imgproc/imgproc_c.h>`:引用了OpenCV的图像处理函数的C接口。
这些头文件的引用是为了在程序中使用相应的函数和数据类型。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)