void ShowVideo() { //创建数据库连接 MYSQL mysql; mysql_init(&mysql); mysql_real_connect(&mysql, "localhost", "root", "123456", "database", 3306, NULL, 0); mysql_query(&mysql, "set names utf8"); SOCKET server = socket(AF_INET, SOCK_STREAM, 0);(位于 server2.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000000E76B6DC00 处。 char buffer[2048] = " "; SOCKET sockConn = accept(server, NULL, NULL); Mat videoData; while (true) { int bytes = recv(sockConn, buffer, 2048, 0); if (bytes <= 0) break; // 将接收到的视频数据拼接在一起 videoData.push_back(Mat(1, bytes, CV_8UC1, buffer).clone()); } closesocket(sockConn); //size_t fileSize = 0; std::ofstream videoFile("server_video.avi", std::ios::binary | std::ios::app); while (true) { int bytes = recv(sockConn, buffer, 2048, 0); if (bytes <= 0) break; //fileSize += bytes; // 将接收到的视频数据写入到.avi文件中 //std::ofstream videoFile("server_video.avi", std::ios::binary | std::ios::app); videoFile.write(buffer, bytes); } videoFile.close(); VideoWriter writer("server_video.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25.0, Size(640, 480)); if (writer.isOpened()) { writer.write(videoData); } //读取视频文件内容并保存到数据库 ifstream fin("server_video.avi", ios::binary | ios::in); if (!fin) { cout << "打开文件失败" << endl; exit(0); } fin.seekg(0, ios::end); int filesize = fin.tellg(); fin.seekg(0, ios::beg); char* fileContent = new char[filesize]; fin.read(fileContent, filesize); string fileContentStr(fileContent, filesize); //将视频内容上传到数据库 string strSql = "INSERT INTO videos(content) VALUES('"+ fileContentStr + "')"; mysql_query(&mysql, strSql.c_str()); delete[] fileContent; fin.close(); //mysql_close(&mysql); /*closesocket(sockConn); closesocket(server); WSACleanup();*/ }
时间: 2024-04-18 09:33:09 浏览: 102
你的代码中出现了一个异常 `cv::Exception`。根据你提供的信息,我无法确定具体的错误原因。但是,根据代码的结构,可能是由于视频数据的处理不正确导致的。
首先,确保你已经正确安装了 OpenCV 库,并且库的版本与你的代码兼容。然后,你可以尝试以下修改来解决问题:
1. 确保 `recv` 函数接收到的数据大小与视频帧的大小一致。即确保每次接收到的数据大小为 `videoData` 中每一帧图像的大小。
2. 确保 `recv` 函数接收到的数据存储在 `buffer` 中,并且每次接收到的数据都写入到 `videoData` 中。
3. 确保 `recv` 函数在接收到所有数据后返回 0。
4. 在写入视频文件之前,检查视频文件是否成功打开。可以通过检查 `videoFile.is_open()` 的返回值来确认。
5. 在读取视频文件之前,检查视频文件是否成功打开。可以通过检查 `fin.is_open()` 的返回值来确认。
6. 确保数据库连接成功。你可以通过检查 `mysql_real_connect` 的返回值来确认连接是否成功。
7. 确保数据库连接关闭。在代码结束时,调用 `mysql_close` 函数关闭数据库连接。
请注意,这只是一些可能导致问题的常见原因。如果问题仍然存在,请提供更多的错误信息和代码上下文,以便我能够更好地理解问题并提供更具体的帮助。
相关问题
D:\qt_work\5.14work\Video28181\work\VideoService28181\28181\showvideo28181.h:75: error: C1071: 在注释中遇到意外的文件结束
根据提供的引用内容,第一个错误是找不到'type_traits'文件,第二个错误是缺少Qt5Core库的版本。而第三个错误是在注释中遇到意外的文件结束。下面是对这三个错误的解释和解决方法:
1. 'type_traits' file not found
这个错误通常是由于编译器无法找到所需的头文件而引起的。在这种情况下,编译器无法找到'type_traits'文件。要解决这个问题,您需要确保您的编译器可以找到所需的头文件。您可以通过将头文件路径添加到编译器的搜索路径中来实现这一点。例如,在GCC编译器中,您可以使用-I选项将头文件路径添加到搜索路径中。例如,如果您的头文件位于/usr/include目录中,则可以使用以下命令编译您的代码:
```shell
g++ -I/usr/include myfile.cpp -o myfile
```
2. version `Qt_5.14' not found
这个错误通常是由于缺少Qt5Core库的版本引起的。在这种情况下,您需要安装Qt5Core库的正确版本。您可以从Qt官方网站下载并安装所需的库。如果您已经安装了正确的库,但仍然遇到此错误,请确保您的系统路径中包含正确的库路径。您可以使用以下命令将库路径添加到系统路径中:
```shell
export LD_LIBRARY_PATH=/path/to/Qt5Core/lib:$LD_LIBRARY_PATH
```
3. C1071: unexpected end of file in comment
这个错误通常是由于注释中缺少结束符引起的。在这种情况下,您需要检查您的代码并确保所有注释都有正确的结束符。您可以使用以下命令查找缺少结束符的注释:
```shell
grep -r -n --include=*.h --include=*.cpp "//" /path/to/your/code
```
这将在您的代码中查找所有缺少结束符的注释,并显示它们的行号和文件名。
python的cv2.WINDOW_NORMAL改成C#语音
在Python的OpenCV库中,`cv2.WINDOW_NORMAL`是一个标志常量,用于创建一个新的窗口并允许其大小自适应。而在C#中,虽然没有直接对应的一个确切名称,但是如果你需要类似的功能,通常会在创建Windows Forms的Form或PictureBox控件时设置窗体的大小和位置属性。
在C#的AForge.NET或者其他图像处理库中,如果要创建一个可以调整大小的窗口,你可以这样做:
```csharp
using AForge.Video;
using System.Windows.Forms;
public class VideoCaptureWindow : Form
{
private PictureBox pictureBox;
public VideoCaptureWindow()
{
pictureBox = new PictureBox();
pictureBox.SizeMode = PictureBoxSizeMode.StretchImage; // 或者根据需要选择合适的模式
Controls.Add(pictureBox);
// 设置窗口样式,允许用户调整大小
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.MaximizeBox = true;
this.MinimizeBox = true;
}
// 加载视频流到PictureBox
public void ShowVideo(Stream videoStream)
{
// 使用AForge或其他库加载视频
VideoDevice device = new VideoDevice(videoStream);
VideoCapture cap = new VideoCapture(device);
while (true)
{
Bitmap frame = new Bitmap(cap.FrameSize.Width, cap.FrameSize.Height);
BitmapData data = frame.LockBits(new Rectangle(0, 0, frame.Width, frame.Height), ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);
Marshal.Copy(cap.RetrieveBuffer(), 0, data.Scan0, cap.BufferSize);
frame.UnlockBits(data);
pictureBox.Image = frame;
Application.DoEvents(); // 更新窗口显示
cap.WaitForNewFrame();
}
}
}
```
阅读全文