windows server中opencv运行过程中MF.dll/MFReadWrite.dll/MFPlat.DLL文件丢失问题解决

windows server 2008/2012 使用opencv出现 DLL load failed错误,发现缺失部分dll:MFPlat.dll、MF.dll、MFReadWrite.dll等等,原因:服务器版本默认没有安装windows media player。
1、解决方法1:使用如下步骤安装windows media player:
1)、打开“服务器管理器”;
2)、依次单击“功能” →  “添加功能”;
3)、勾选“桌面体验”和“优质Windows音频视频体验”;
4)、单击“安装”按钮;安装完毕,根据提示重新启动计算机。
安装完成以后能正常使用opencv库了。
 
2、解决方法2
使用低版本opencv(比如2.4.9),高版本(比如3.4.0)需要依赖MFPlat.dll、MF.dll、MFReadWrite.dll文件。
 
3、解决方法3
将win7中system32 和SysWOW64文件夹内的MFPlat.dll、MF.dll、MFReadWrite.dll复制到server2008/2012对应目录即可。
#include <iostream> #include <fstream> #include <cstring> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv ; using namespace std ; struct point { int row; int col ; } p[1000000];//记录白点的点的集合 即钢 struct vadioline2//2条钢的结构体 { int id; int xbegin; int xend; int ybegin; int yend; int flag;//正确为1,异常为-1; int cur_max;//最大斜率 int wei_max;//最大宽度 }bmp_line2[100];//7 int main() { //IplImage* imgSrc = cvLoadImage("D:\\测试钢\\2.bmp",0);//对图像的灰度化 IplImage* imgSrc = cvLoadImage("D:\\Opencv_picture\\1.bmp",0);//对图像的灰度化 /* cvNamedWindow("show") ; cvShowImage("show",imgSrc) ; cvWaitKey(0) ;*/ uchar* pixel = new uchar; //int data =0; int time = 0 ; int i,j ; int len = 0 ;// 白点的个数 //ofstream file("D:\\测试钢\\1.txt", ios::out);//打开一个文件,等同于file.open("test.txt", ios::out); int ImageData[1000][1000] ; memset(ImageData,0,sizeof(ImageData)) ; for (i = 0; i < imgSrc->height; i++)//遍历图像所有像素点 { for (j = 0; j < imgSrc->width; j++) { pixel = (uchar*)(imgSrc->imageData + i*imgSrc->widthStep+j); //data = (int)(imgSrc->imageData + i*imgSrc->widthStep+j) ; // cout << "pixel=" <<(*pixel)+0<< endl;//+0隐式转换为整型,否则会打印出字符 /// file <<(*pixel)+0<<" " ; ImageData[j][i] = (*pixel)+0 ; //ImageData[j][i] = data ; /*time++ ; if(time == 100) { file<<endl ; }*/ if((*pixel)+0 == 255) //把所有的白点都存到了P素组 //if(data == 255) //把所有的白点都存到了P素组 { p[len].row = j ; p[len].col = i; len++ ; } } } cout<<len<<endl ; /*ofstream file1("D:\\测试钢\\11.txt", ios::out); //把点的坐标都记录下来 放到11.TXT的文本文档 cout<<len<<endl ; for(i = 0 ; i < len ;i++) { file1 <<p[i].x<<" "<<p[i].y<<" "<<endl ; time++ ; if(time == 100) { file1<<endl ; } }*/ int change_count = 0 ; int change_flag = 0 ; int change_first = 0;//是否是第一次发现是2条钢的那条直线 int change_final = 0 ;//是否是最后一次 int change_first_y = 0; int change_middle_1_y = 0 ; int change_middle_2_y = 0 ; int change_final_y = 0 ; int change_second_y = 0; for(i = 0 ; i < 1000 ;i++) { change_count = 0 ; //change_flag = change_count ; for(j = 0 ; j < 1000 ;j++) { if(ImageData[i][j] > 0 && !change_flag) { change_count++ ; change_flag = 1 ; if(change_count == 1) change_first_y = j ; else change_second_y = j ; } if(ImageData[i][j] == 0 && change_flag) { change_flag = 0 ; if(change_count == 1) { change_middle_1_y = j ; } else change_middle_2_y = j ; } if(change_count == 2) { change_final_y = j ; break ; } } if(change_count == 2 ) //说明是第一次发现是2条钢 { change_flag = 1 ; bmp_line2[0].xbegin = i ;//记录下开始坐标 bmp_line2[0].ybegin = change_first_y ;//记录下开始坐标 bmp_line2[0].yend = change_middle_1_y-1 ; if(bmp_line2[0].yend - bmp_line2[0].ybegin > bmp_line2[0].wei_max) //算出最大的宽度 bmp_line2[0].wei_max = bmp_line2[0].yend - bmp_line2[0].ybegin ; bmp_line2[1].xbegin = i ;//记录下开始坐标 bmp_line2[1].ybegin = change_second_y ;//记录下开始坐标 bmp_line2[1].yend = change_middle_2_y-1 ; if(bmp_line2[1].yend - bmp_line2[1].ybegin > bmp_line2[1].wei_max) bmp_line2[1].wei_max = bmp_line2[1].yend - bmp_line2[1].ybegin ; } if(change_count != 2 && change_first == 1) //说明是最后一次发现是2条钢 { change_first = 0; bmp_line2[0].xend = i ;//记录下结束坐标 bmp_line2[1].xend = i ;//记录下结束坐标 break; } } ofstream file1("D:\\Opencv_picture\\1.txt", ios::out); //把点的坐标都记录下来 放到11.TXT的文本文档 file1 <<bmp_line2[0].wei_max<<" "<<bmp_line2[1].wei_max<<" "<<endl ; cvReleaseImage(&imgSrc); //delete imgSrc ; file1.close() ; //file.close() ; delete pixel; delete ImageData ; return 0 ; } ////// “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\msvcp140d.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mfplat.dll”。无法查找或打开 PDB 文件。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\d3d11.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mfreadwrite.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\concrt140d.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140d.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\ucrtbased.dll”。无法查找或打开 PDB 文件。 “Opencv_judge.exe”(Win32): 已卸载“C:\Windows\System32\ucrtbased.dll” “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mf.dll”。无法查找或打开 PDB 文件。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\dxgi.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\ucrtbased.dll”。无法查找或打开 PDB 文件。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\cryptbase.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mfcore.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\crypt32.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\msasn1.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\ksuser.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\bcrypt.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\imm32.dll”。已加载符号。 “Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\RTWorkQ.dll”。已加载符号。 0x00007FF6DD5D8C27 处的第一机会异常(在 Opencv_judge.exe ): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x000000A7E3A03000)。 0x00007FF6DD5D8C27 处有未经处理的异常(在 Opencv_judge.exe ): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x000000A7E3A03000)。 线程 0xb6c 已退出,返回值为 0 (0x0)。 线程 0x798 已退出,返回值为 0 (0x0)。 线程 0xdc0 已退出,返回值为 0 (0x0)。 程序“[13436] Opencv_judge.exe”已退出,返回值为 0 (0x0)。 ![图片说明](https://img-ask.csdn.net/upload/201808/09/1533776220_379488.jpg)
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页