不存在从"int"转换到"std::vector<cv::Mat,>>"的适当构造函数

void Cut_img(Mat src_img, int m, int n, vector ceil_img)
{
int t = m * n;
int height = src_img.rows;
int width = src_img.cols;

int ceil_height = height / m;
int ceil_width = width / n;

Mat roi_img, tmp_img;

Point p1, p2;
for (int i = 0; i<m; i++)
    for (int j = 0; j<n; j++) {
        //p1 = 
        Rect rect(i + j*ceil_width, j + i*ceil_height, ceil_width, ceil_height);

        src_img(rect).copyTo(roi_img);

        ceil_img.push_back(roi_img);
        imshow("roi_img", roi_img);
        //getchar();
        waitKey(0);
        //rectangle(i+j*ceil_width,j+i*ceil_height,);
    }

}

void show_images(vector imgs, int n) {

//do something

}

int _tmain(int argc, _TCHAR* argv[])
{
Mat img = imread("dog.jpg", 1);
imshow("src img", img);
int m = 3;
int n = 3;
vector ceil_img = m*n;

Cut_img(img, m, n, ceil_img);

waitKey();
return 0;

}
整个代码是图片剪切的代码,问题出现在倒数第三行代码,cut_img(img,m,n,ceil_img);
错误为:不存在从"int"转换到"std::vectorcv::Mat,std::allocator<cv::Mat>"的适当构造函数

还有错误C2440:"初始化":无法从“int”转换为"std::vectorcv::Mat,std::allocator<_Ty>"

4个回答

楼主你这是要干什么 ceil_img 是个类吧 这样初始化的话 vector这个类得提供适当的转换构造函数才行 如果你想分配m*n大小的空间 应该是这样
vector ceil_img(m*n); 昨天才建的博客 还不怎么会弄 0.0 一打下划线就变成斜体

vector ceil_img(m*n)

"vector<int>ceil_img(m*n)" 怎么把"<"int">" 给吃掉了

我也遇到了这个问题,请问群主是怎么解决的?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
导入*.cpp文件后,编译出现错误error LNK2005
seg.cpp的代码功能是预处理图片/检测图片 现在Cpig.cpp中加入include < seg.cpp > 出现如下错误: ``` 1>------ 已启动全部重新生成: 项目: AnimalsFatMeasure, 配置: Release x64 ------ 1>stdafx.cpp 1>AnimalsFatMeasure.cpp 1>AnimalsFatMeasureDlg.cpp 1>Cpig.cpp 1>INFOR.cpp 1>seg.cpp 1>seg.obj : error LNK2005: "class cv::Mat g_srcImage" (?g_srcImage@@3VMat@cv@@A) 已经在 Cpig.obj 中定义 1>seg.obj : error LNK2005: "class cv::Mat g_grayImage" (?g_grayImage@@3VMat@cv@@A) 已经在 Cpig.obj 中定义 1>seg.obj : error LNK2005: "class cv::Mat out_therImage" (?out_therImage@@3VMat@cv@@A) 已经在 Cpig.obj 中定义 1>seg.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > saveImage" (?saveImage@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 Cpig.obj 中定义 1>seg.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > file_save" (?file_save@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 Cpig.obj 中定义 1>Cpig.obj : error LNK2005: "float __cdecl Zfhanliang(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?Zfhanliang@@YAMV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 Cpig.obj 中定义 1>Cpig.obj : error LNK2005: "bool __cdecl Jh12(int,int)" (?Jh12@@YA_NHH@Z) 已经在 Cpig.obj 中定义 ``` 具体代码如下 seg.cpp ``` #include"stdafx.h" #include <iostream> #include<opencv2\opencv.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<vector> #include<math.h> #include<algorithm> #include<time.h> #include<io.h> #include<stdio.h> #include<string> //#include<squares.cpp> using namespace cv; using namespace std; Mat g_srcImage, g_grayImage, out_therImage; string saveImage = "preidentify/save"; string file_save = "middleidentify/"; ``` Cpig.cpp代码如下 ``` #include "Resource.h" #include "stdafx.h" #include "AnimalsFatMeasure.h" #include "Cpig.h" #include "afxdialogex.h" #include "INFOR.h" #include <opencv2/opencv.hpp> #include "seg.cpp" ```
VS中提示无法解析外部符号
1>------ 已启动生成: 项目: Eyebio, 配置: Release Win32 ------ 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class cv::Mat __cdecl md1(class cv::Mat &,class cv::RNG &)" (?md1@@YA?AVMat@cv@@AAV12@AAVRNG@2@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "void __cdecl InitBGModel3(struct _IplImage *,class cv::RNG &)" (?InitBGModel3@@YAXPAU_IplImage@@AAVRNG@cv@@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class cv::Mat __cdecl md(class cv::Mat &,class cv::RNG &)" (?md@@YA?AVMat@cv@@AAV12@AAVRNG@2@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class std::vector<class cv::Rect_<int>,class std::allocator<class cv::Rect_<int> > > __cdecl getTrackRect3(class cv::Mat &)" (?getTrackRect3@@YA?AV?$vector@V?$Rect_@H@cv@@V?$allocator@V?$Rect_@H@cv@@@std@@@std@@AAVMat@cv@@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class cv::Mat __cdecl md3(class cv::Mat &,class cv::RNG &)" (?md3@@YA?AVMat@cv@@AAV12@AAVRNG@2@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class cv::Mat __cdecl md2(class cv::Mat &,class cv::RNG &)" (?md2@@YA?AVMat@cv@@AAV12@AAVRNG@2@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "void __cdecl InitBGModel(struct _IplImage *,class cv::RNG &)" (?InitBGModel@@YAXPAU_IplImage@@AAVRNG@cv@@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class std::vector<class cv::Rect_<int>,class std::allocator<class cv::Rect_<int> > > __cdecl getTrackRect1(class cv::Mat &)" (?getTrackRect1@@YA?AV?$vector@V?$Rect_@H@cv@@V?$allocator@V?$Rect_@H@cv@@@std@@@std@@AAVMat@cv@@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "void __cdecl InitBGModel2(struct _IplImage *,class cv::RNG &)" (?InitBGModel2@@YAXPAU_IplImage@@AAVRNG@cv@@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class cv::Rect_<int> __cdecl getTrackRect(class cv::Mat &)" (?getTrackRect@@YA?AV?$Rect_@H@cv@@AAVMat@2@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "class cv::Rect_<int> __cdecl getTrackRect2(class cv::Mat &)" (?getTrackRect2@@YA?AV?$Rect_@H@cv@@AAVMat@2@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 "void __cdecl InitBGModel1(struct _IplImage *,class cv::RNG &)" (?InitBGModel1@@YAXPAU_IplImage@@AAVRNG@cv@@@Z) 1>EyebioDlg.obj : error LNK2001: 无法解析的外部符号 _CreateExportObj@0 1>C:\Users\heqing\Desktop\Eyebio(141117\Eyebio\Release\Eyebio.exe : fatal error LNK1120: 13 个无法解析的外部命令 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
VS2010+opencv2.4.10 error LNK2001: 无法解析的外部符号
![图片说明](https://img-ask.csdn.net/upload/201705/16/1494931643_91832.png)1>CameraDS.obj : error LNK2001: 无法解析的外部符号 _cvReleaseImage 1>CameraDS.obj : error LNK2001: 无法解析的外部符号 _cvCreateImage 1>CameraDS.obj : error LNK2001: 无法解析的外部符号 _cvFlip![图片说明](https://img-ask.csdn.net/upload/201705/16/1494932063_459352.png) 1>CvvImage.obj : error LNK2001: 无法解析的外部符号 _cvGetSize 1>CvvImage.obj : error LNK2001: 无法解析的外部符号 _cvConvertImage 1>CvvImage.obj : error LNK2001: 无法解析的外部符号 _cvLoadImage 1>CvvImage.obj : error LNK2001: 无法解析的外部符号 _cvSetImageROI 1>CvvImage.obj : error LNK2001: 无法解析的外部符号 _cvSaveImage 1>CvvImage.obj : error LNK2001: 无法解析的外部符号 _cvShowImage 1>CvvImage.obj : error LNK2001: 无法解析的外部符号 _cvGetImageROI 1>mymfc.obj : error LNK2001: 无法解析的外部符号 _cvDestroyWindow 1>mymfc.obj : error LNK2001: 无法解析的外部符号 _cvReleaseCapture 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declsp![![![![图片说明](https://img-ask.csdn.net/upload/201705/16/1494931732_440893.png)图片说明](https://img-ask.csdn.net/upload/201705/16/1494931633_997993.png)图片说明](https://img-ask.csdn.net/upload/201705/16/1494931500_68171.png)图片说明](https://img-ask.csdn.net/upload/201705/16/1494931362_928728.png)ec(dllimport) public: __thiscall asm_shape::~asm_shape(void)" (__imp_??1asm_shape@@QAE@XZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvReleaseMat 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "int __cdecl cv::_interlockedExchangeAdd(int *,int)" (?_interlockedExchangeAdd@cv@@YAHPAHH@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall cv::Mat::copySize(class cv::Mat const &)" (?copySize@Mat@cv@@QAEXABV12@@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall cv::_OutputArray::_OutputArray(class cv::Mat &)" (??0_OutputArray@cv@@QAE@AAVMat@1@@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QAE@ABVMat@1@@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvResize 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvResetImageROI 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvWaitKey 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall cv::CascadeClassifier::CascadeClassifier(void)" (??0CascadeClassifier@cv@@QAE@XZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual __thiscall cv::CascadeClassifier::~CascadeClassifier(void)" (??1CascadeClassifier@cv@@UAE@XZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: bool __thiscall cv::CascadeClassifier::load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?load@CascadeClassifier@cv@@QAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall cv::Mat::Mat(struct _IplImage const *,bool)" (??0Mat@cv@@QAE@PBU_IplImage@@_N@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "void __cdecl cv::cvtColor(class cv::_InputArray const &,class cv::_OutputArray const &,int,int)" (?cvtColor@cv@@YAXABV_InputArray@1@ABV_OutputArray@1@HH@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "void __cdecl cv::equalizeHist(class cv::_InputArray const &,class cv::_OutputArray const &)" (?equalizeHist@cv@@YAXABV_InputArray@1@ABV_OutputArray@1@@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall cv::CascadeClassifier::detectMultiScale(class cv::Mat const &,class std::vector<class cv::Rect_<int>,class std::allocator<class cv::Rect_<int> > > &,double,int,int,class cv::Size_<int>,class cv::Size_<int>)" (?detectMultiScale@CascadeClassifier@cv@@UAEXABVMat@2@AAV?$vector@V?$Rect_@H@cv@@V?$allocator@V?$Rect_@H@cv@@@std@@@std@@NHHV?$Size_@H@2@2@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall asm_shape::asm_shape(void)" (__imp_??0asm_shape@@QAE@XZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall asmfitting::asmfitting(void)" (__imp_??0asmfitting@@QAE@XZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall asmfitting::~asmfitting(void)" (__imp_??1asmfitting@@QAE@XZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: bool __thiscall asmfitting::Read(char const *)" (__imp_?Read@asmfitting@@QAE_NPBD@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall asm_shape::Resize(int)" (__imp_?Resize@asm_shape@@QAEXH@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 __imp__InitShapeFromDetBox 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: bool __thiscall asmfitting::ASMSeqSearch(class asm_shape &,struct _IplImage const *,int,bool,int)" (__imp_?ASMSeqSearch@asmfitting@@QAE_NAAVasm_shape@@PBU_IplImage@@H_NH@Z) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvNamedWindow 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvResizeWindow 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvGetWindowHandle 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvSetZero 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvCloneImage 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvRectangle 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvCircle 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvCreateMat 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvGEMM 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvSVD 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 _cvTrace 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: double const __thiscall asmfitting::GetMeanFaceWidth(void)const " (__imp_?GetMeanFaceWidth@asmfitting@@QBE?BNXZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class asm_shape const __thiscall asmfitting::GetMappingDetShape(void)const " (__imp_?GetMappingDetShape@asmfitting@@QBE?BVasm_shape@@XZ) 1>mymfcDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: struct Point2D32f & __thiscall asm_shape::operator[](int)" (__imp_??Aasm_shape@@QAEAAUPoint2D32f@@H@Z) ![图片说明](https://img-ask.csdn.net/upload/201705/16/1494931813_739749.png)
请问opencv如何加载bvlc_reference_caffenet
如下代码是根据opencv加载googlenet的代码修改的,用来调用自己训练的caffenet,可是根本不能输出正确的识别结果。 ``` #include <opencv2/dnn.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/core/utils/trace.hpp> using namespace cv; using namespace cv::dnn; #include <fstream> #include <iostream> #include <cstdlib> using namespace std; //寻找出概率最高的一类 static void getMaxClass(const Mat &probBlob, int *classId, double *classProb) { Mat probMat = probBlob.reshape(1, 1); Point classNumber; minMaxLoc(probMat, NULL, classProb, NULL, &classNumber); *classId = classNumber.x; } //从标签文件读取分类 空格为标志 static std::vector<String> readClassNames(const char *filename = "label.txt") { std::vector<String> classNames; std::ifstream fp(filename); if (!fp.is_open()) { std::cerr << "File with classes labels not found: " << filename << std::endl; exit(-1); } std::string name; while (!fp.eof()) { std::getline(fp, name); if (name.length()) classNames.push_back(name.substr(name.find(' ') + 1)); } fp.close(); return classNames; } //主程序 int main(int argc, char **argv) { //初始化 CV_TRACE_FUNCTION(); //读取模型参数和模型结构文件 String modelTxt = "deploy.prototxt"; String modelBin = "caffe_train_iter_5000.caffemodel"; //读取图片 String imageFile = (argc > 1) ? argv[1] : "./ceshi/0.jpg"; //合成网络 Net net = dnn::readNetFromCaffe(modelTxt, modelBin); //判断网络是否生成成功 if (net.empty()) { std::cerr << "Can't load network by using the following files: " << std::endl; exit(-1); } cerr << "net read successfully" << endl; //读取图片 Mat img = imread(imageFile); imshow("image", img); if (img.empty()) { std::cerr << "Can't read image from the file: " << imageFile << std::endl; exit(-1); } cerr << "image read sucessfully" << endl; Mat inputBlob = blobFromImage(img, 1.0f, Size(227, 227)); Mat prob; cv::TickMeter t; for (int i = 0; i < 10; i++) { CV_TRACE_REGION("forward"); //将构建的blob传入网络data层 net.setInput(inputBlob, "data"); //计时 t.start(); //前向预测 prob = net.forward("prob"); //停止计时 t.stop(); } int classId; double classProb; //找出最高的概率ID存储在classId,对应的标签在classProb中 getMaxClass(prob, &classId, &classProb); //打印出结果 std::vector<String> classNames = readClassNames(); std::cout << "Best class: #" << classId << " '" << classNames.at(classId) << "'" << std::endl; std::cout << "Probability: " << classProb * 100 << "%" << std::endl; //打印出花费时间 std::cout << "Time: " << (double)t.getTimeMilli() / t.getCounter() << " ms (average from " << t.getCounter() << " iterations)" << std::endl; //便于观察结果 waitKey(0); return 0; } ```
在使用重载函数时出现的问题
class IPM { private: // Sizes cv::Size m_origSize; cv::Size m_dstSize; // Points std::vector<cv::Point2f> m_origPoints; std::vector<cv::Point2f> m_dstPoints; // Homography cv::Mat m_H; cv::Mat m_H_inv; // Maps cv::Mat m_mapX, m_mapY; cv::Mat m_invMapX, m_invMapY; void createMaps(); public: IPM( const cv::Size& _origSize, const cv::Size& _dstSize, const std::vector<cv::Point2f>& _origPoints, const std::vector<cv::Point2f>& _dstPoints ); // Apply IPM on points cv::Point2d applyHomography(const cv::Point2d& _point, const cv::Mat& _H); cv::Point3d applyHomography( const cv::Point3d& _point, const cv::Mat& _H); cv::Point2d applyHomography(const cv::Point2d& _point); cv::Point3d applyHomography( const cv::Point3d& _point); cv::Point2d applyHomographyInv(const cv::Point2d& _point); cv::Point3d applyHomographyInv( const cv::Point3d& _point); void applyHomography( const cv::Mat& _origBGR, cv::Mat& _ipmBGR, int borderMode = cv::BORDER_CONSTANT); void applyHomographyInv( const cv::Mat& _ipmBGR, cv::Mat& _origBGR, int borderMode = cv::BORDER_CONSTANT); // Draw void drawPoints( const std::vector<cv::Point2f>& _points, cv::Mat& _img ) const; //******************************************************************************************** //* SETTERS AND GETTERS //******************************************************************************************** cv::Mat getH() const { return m_H; } cv::Mat getHinv() const { return m_H_inv; } void getPoints(std::vector<cv::Point2f>& _origPts, std::vector<cv::Point2f>& _ipmPts); }; IPM::IPM( const Size& _origSize, const Size& _dstSize, const vector<Point2f>& _origPoints, const vector<Point2f>& _dstPoints ): m_origSize(_origSize), m_dstSize(_dstSize), m_origPoints(_origPoints), m_dstPoints(_dstPoints){ m_H = getPerspectiveTransform( m_origPoints, m_dstPoints ); m_H_inv = m_H.inv(); createMaps(); } IPM::IPM ipm( Size(imgG.cols, imgG.rows), Size(imgG.cols, imgG.rows), orgPts, dstPts ); // IPM object ipm.applyHomography( imgG, imgIpm ); 鼠标放在IPM::IPM ipm时会出现无法确定需要哪个重载函数 错误提示“IPM::{ctor}”: 函数调用缺少参数列表;请使用“&IPM::{ctor}”创建指向成员的指针 “ipm”: 找不到标识符
opencv的 FastFeatureDetector fast(40)怎么用不了
#include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Mat image; image = imread("1.jpg"); // 存储为关键点 std::vector<KeyPoint> keyPoints; // 定义特征检测 FastFeatureDetector fast(40); // 检测的阈值为40 “cv::FastFeatureDetector”: 不能实例化抽象类 // 特征点检测 fast.detect(image,keyPoints); drawKeypoints(image, keyPoints, image, Scalar::all(255), DrawMatchesFlags::DRAW_OVER_OUTIMG); imshow("FAST feature", image); waitKey(0); return a.exec(); } error: C2259: “cv::FastFeatureDetector”: 不能实例化抽象类 error: C2664: “cv::FastFeatureDetector::FastFeatureDetector(cv::FastFeatureDetector &&)”: 无法将参数 1 从“int”转换为“const cv::FastFeatureDetector &”
ubuntu下使用findChessboardCorners(opencv)出错
想用qt编写个能显示棋盘角点的程序,但是一直提示 undefined reference to `cv::findChessboardCorners‘, 想不通为什么?具体代码如下 主要代码如下 ``` cv::Mat image1, Extractcorner; std::vector<cv::Point2f> corners; //用来储存所有角点坐标 cv::Size board_size = cv::Size(6, 7); //标定板每行,每列角点数 image1 = cv::imread("0.jpg"); Extractcorner = image1.clone(); cv::Mat imageGray; cv::cvtColor(image1, imageGray, CV_RGB2GRAY); bool patternfound = cv::findChessboardCorners(image1, board_size, corners); if (!patternfound) { std::cout << "can not find chessboard corners!" << std::endl; exit(1); } else { //亚像素精确化 cv::cornerSubPix(imageGray, corners, cv::Size(11, 11), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1)); } ``` 头文件: ``` #include <QMainWindow> #include<cv.h> #include <highgui.h> #include<cxcore.h> #include <QTimer> #include <QPainter> #include<vector> #include<math.h> #include<opencv2/opencv.hpp> ``` 在qt工程.pro也添加了链接库 ``` INCLUDEPATH += /usr/local/include \ /usr/local/include/opencv \ /usr/local/include/opencv2 LIBS += /usr/local/lib/libopencv_highgui.so \ /usr/local/lib/libopencv_core.so \ /usr/local/lib/libopencv_imgproc.so ``` 然后提示 undefined reference to `cv::findChessboardCorners(cv::_InputArray const&, cv::Size_<int>, cv::_OutputArray const&, int)' 求大神帮忙回答下啊?很急!!
Android NDK JNI, Method 'xxx' could not be resolved
用C++做了个Opencv的项目,想移植Android。在使用NDK开发时,遇到一些问题,C++源文件cpp中有一些函数参数无效,或无法找到。求大神帮忙,万分感激! ![CSDN移动问答][1] ERROR_1: Invalid arguments 'Candidates are:double contourArea(const cv::_InputArray &, bool)' ERROR_2: Invalid arguments 'Candidates are:const std::vector<cv::Point_<int>,std::allocator<cv::Point_<int>>> & at(?)std::vector<cv::Point_<int>,std::allocator<cv::Point_<int>>> & at(?)' ERROR_3: Method 'size' could not be resolved ![CSDN移动问答][2] ERROR: Invalid arguments 'Candidates are:CvSeq * cvCreateSeq(int, ?, ?, CvMemStorage *)' ![CSDN移动问答][3] ERROR: Type 'CV_MAT_ELEM_PTR(*cMatrix, 0, 0)' could not be resolved [1]: http://img.my.csdn.net/uploads/201407/21/1405932853_5743.png [2]: http://img.my.csdn.net/uploads/201407/21/1405932832_2006.png [3]: http://img.my.csdn.net/uploads/201407/21/1405932854_7728.png
为什么我的图片显示成灰色,鼠标一直显示忙碌呢?
各位大神,大家好 我使用opencv的imshow显示图片,但是窗口能正常显示,但是图片一直为灰色,而且鼠标显示忙碌,然后会自动退出。在网上查询许久不得要领,小白一枚,劳烦各位帮忙看看是什么原因,谢谢orz ``` #include<opencv2\opencv.hpp> #include "../include/Pipeline.h" using namespace pr; using namespace cv; void TEST_PIPELINE(){ /* 定义模型 */ pr::PipelinePR prc("../lpr/model/cascade.xml", "../lpr/model/HorizonalFinemapping.prototxt","../lpr/model/HorizonalFinemapping.caffemodel", "../lpr/model/Segmentation.prototxt","../lpr/model/Segmentation.caffemodel", "../lpr/model/CharacterRecognization.prototxt","../lpr/model/CharacterRecognization.caffemodel" //"../Ipr/model/SegmentationFree.prototxt", "../Ipr/model/SegmentationFree.caffemodel" ); Mat image = imread("C:\\Users\\wysdy\\Desktop\\HyperLPR-master\\Prj-Win\\1.jpg"); imshow("image",image); waitKey(25); /* 申明一个存储该图片车牌信息检测结果的列表,读取结果 */ std::vector<pr::PlateInfo> res = prc.RunPiplineAsImage(image); float conf = 0 ; /* 开始对每一个结果进行遍历 */ for(auto st:res) { if(st.confidence>0.75) { std::cout << st.getPlateName() << " " << st.confidence << std::endl; conf += st.confidence; //waitKey(0); } } std::cout<<conf<<std::endl; system("pause"); } int main() { TEST_PIPELINE(); return 0 ; } ```
C++调用 C# dll 的问题
class ObjectResult { public: int objid; std::vector<cv::Rect> track; }; class TrackingResult { public: std::vector<ObjectResult> tracks; }; class Tracker { public: Tracker(){}; //构造函数,给对象初始化 virtual ~Tracker(){}; //析构函数,在程序运行结束后,清理一些空间 virtual bool init(const char* configFile)=0; //=0代表“纯虚函数” virtual void process(cv::Mat& color, int frameNum,cv::Rect roi)=0; //检测跟踪过程 virtual TrackingResult* getResult()=0; //获取检测跟踪后的一些结果参数 virtual void draw(cv::Mat& img)=0; //将检测跟踪结果画出来 }; extern "C" TRACKERAPI Tracker* CreatTracker(); //可被外部调用的C函数 这是C++的动态库的对外接口函数,怎么在C#里声明,调用呢?
想用树莓派做行人识别,不知道可以吗
先在树莓派上装c++版的opencv,用板子上的csi摄像头采集图像,然后用HOG特征和SVM来检测其中的行人。不知道树莓派算力够吗? 想把这个程序写进去。 ``` #include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/ml/ml.hpp> using namespace std; using namespace cv; #define PosSamNO 1114 //正样本个数 #define NegSamNO 12180 //负样本个数 #define TRAIN true//是否进行训练,true表示重新训练,false表示读取xml文件中的SVM模型 #define CENTRAL_CROP false //true:训练时,对96*160的INRIA正样本图片剪裁出中间的64*128大小人体 //HardExample:负样本个数。如果HardExampleNO大于0,表示处理完初始负样本集后,继续处理HardExample负样本集。 //不使用HardExample时必须设置为0,因为特征向量矩阵和特征类别矩阵的维数初始化时用到这个值 #define HardExampleNO 433 //继承自CvSVM的类,因为生成setSVMDetector()中用到的检测子参数时,需要用到训练好的SVM的decision_func参数, //但通过查看CvSVM源码可知decision_func参数是protected类型变量,无法直接访问到,只能继承之后通过函数访问 class MySVM : public CvSVM { public: //获得SVM的决策函数中的alpha数组 double * get_alpha_vector() { return this->decision_func->alpha; } //获得SVM的决策函数中的rho参数,即偏移量 float get_rho() { return this->decision_func->rho; } }; int main() { //检测窗口(64,128),块尺寸(16,16),块步长(8,8),cell尺寸(8,8),直方图bin个数9 HOGDescriptor hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9);//HOG检测器,用来计算HOG描述子的 int DescriptorDim;//HOG描述子的维数,由图片大小、检测窗口大小、块大小、细胞单元中直方图bin个数决定 MySVM svm;//SVM分类器 //若TRAIN为true,重新训练分类器 if(TRAIN) { string ImgName;//图片名(绝对路径) ifstream finPos("d:/hogmit/pos/pos.txt");//正样本图片的文件名列表 //ifstream finPos("PersonFromVOC2012List.txt");//正样本图片的文件名列表 ifstream finNeg("d:/hogmit/neg/neg.txt");//负样本图片的文件名列表 Mat sampleFeatureMat;//所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数 Mat sampleLabelMat;//训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,-1表示无人 //依次读取正样本图片,生成HOG描述子 for(int num=0; num<PosSamNO && getline(finPos,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; //ImgName = "D:\\DataSet\\PersonFromVOC2012\\" + ImgName;//加上正样本的路径名 ImgName = "d:/hogmit/pos/" + ImgName;//加上正样本的路径名 Mat src = imread(ImgName);//读取图片 if(CENTRAL_CROP) src = src(Rect(16,16,64,128));//将96*160的INRIA正样本图片剪裁为64*128,即剪去上下左右各16个像素 //resize(src,src,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) // cout<<"描述子维数:"<<descriptors.size()<<endl; //处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵 if( 0 == num ) { DescriptorDim = descriptors.size();//HOG描述子的维数 //初始化所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数sampleFeatureMat sampleFeatureMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, DescriptorDim, CV_32FC1); //初始化训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,0表示无人 sampleLabelMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, 1, CV_32FC1); } //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num,i) = descriptors[i];//第num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num,0) = 1;//正样本类别为1,有人 } //依次读取负样本图片,生成HOG描述子 for(int num=0; num<NegSamNO && getline(finNeg,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/neg/" + ImgName;//加上负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO,0) = -1;//负样本类别为-1,无人 } //处理HardExample负样本 if(HardExampleNO > 0) { ifstream finHardExample("d:/hogmit/hard/hard.txt");//HardExample负样本的文件名列表 //依次读取HardExample负样本图片,生成HOG描述子 for(int num=0; num<HardExampleNO && getline(finHardExample,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/hard/" + ImgName;//加上HardExample负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO+NegSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO+NegSamNO,0) = -1;//负样本类别为-1,无人 } } //输出样本的HOG特征向量矩阵到文件 ofstream fout("d:/xlw/SampleFeatureMat.txt"); for(int i=0; i<PosSamNO+NegSamNO; i++) { fout<<i<<endl; for(int j=0; j<DescriptorDim; j++) { fout<<sampleFeatureMat.at<float>(i,j)<<" "; } fout<<endl; } //训练SVM分类器 //迭代终止条件,当迭代满1000次或误差小于FLT_EPSILON时停止迭代 CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 1000, FLT_EPSILON); //SVM参数:SVM类型为C_SVC;线性核函数;松弛因子C=0.01 CvSVMParams param(CvSVM::C_SVC, CvSVM::LINEAR, 0, 1, 0, 0.01, 0, 0, 0, criteria); cout<<"开始训练SVM分类器"<<endl; double time0=static_cast<double>(getTickCount()); svm.train(sampleFeatureMat,sampleLabelMat, Mat(), Mat(), param);//训练分类器 time0=((double)getTickCount()-time0)/getTickFrequency(); cout<<"训练完成"<<endl; cout<<"训练花费时间:"<<time0<<endl; svm.save("d:/xlw/SVM_HOG_mit_inria(1114pos+12180neg+433hard).xml");//将训练好的SVM模型保存为xml文件 } else //若TRAIN为false,从XML文件读取训练好的分类器 { cout<<"fail train"<<endl; //svm.load("SVM_HOG_2400PosINRIA_12000Neg_HardExample(误报少了漏检多了).xml");//从XML文件读取训练好的SVM模型 svm.load("d:/LBP/SVM_Model.xml"); } /************************************************************************************************* 线性SVM训练完成后得到的XML文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho; 将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个列向量。之后,再该列向量的最后添加一个元素rho。 如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()), 就可以利用你的训练样本训练出来的分类器进行行人检测了。 ***************************************************************************************************/ DescriptorDim = svm.get_var_count();//特征向量的维数,即HOG描述子的维数 int supportVectorNum = svm.get_support_vector_count();//支持向量的个数 cout<<"支持向量个数:"<<supportVectorNum<<endl; Mat alphaMat = Mat::zeros(1, supportVectorNum, CV_32FC1);//alpha向量,长度等于支持向量个数 Mat supportVectorMat = Mat::zeros(supportVectorNum, DescriptorDim, CV_32FC1);//支持向量矩阵 Mat resultMat = Mat::zeros(1, DescriptorDim, CV_32FC1);//alpha向量乘以支持向量矩阵的结果 //将支持向量的数据复制到supportVectorMat矩阵中 for(int i=0; i<supportVectorNum; i++) { const float * pSVData = svm.get_support_vector(i);//返回第i个支持向量的数据指针 for(int j=0; j<DescriptorDim; j++) { //cout<<pData[j]<<" "; supportVectorMat.at<float>(i,j) = pSVData[j]; } } //将alpha向量的数据复制到alphaMat中 double * pAlphaData = svm.get_alpha_vector();//返回SVM的决策函数中的alpha向量 for(int i=0; i<supportVectorNum; i++) { alphaMat.at<float>(0,i) = pAlphaData[i]; } //计算-(alphaMat * supportVectorMat),结果放到resultMat中 //gemm(alphaMat, supportVectorMat, -1, 0, 1, resultMat);//不知道为什么加负号? resultMat = -1 * alphaMat * supportVectorMat; //得到最终的setSVMDetector(const vector<float>& detector)参数中可用的检测子 vector<float> myDetector; //将resultMat中的数据复制到数组myDetector中 for(int i=0; i<DescriptorDim; i++) { myDetector.push_back(resultMat.at<float>(0,i)); } //最后添加偏移量rho,得到检测子 myDetector.push_back(svm.get_rho()); cout<<"检测子维数:"<<myDetector.size()<<endl; //设置HOGDescriptor的检测子 HOGDescriptor myHOG; myHOG.setSVMDetector(myDetector); //myHOG.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //保存检测子参数到文件 ofstream fout("d:/xlw/HOGDetectorForOpenCV.txt"); for(int i=0; i<myDetector.size(); i++) { fout<<myDetector[i]<<endl; } /**************读入图片进行HOG行人检测******************/ Mat src = imread("d:/timg.png"); //Mat src = imread("2007_000423.jpg"); //Mat src = imread("1.png"); vector<Rect> found, found_filtered;//矩形框数组 cout<<"进行多尺度HOG人体检测"<<endl; myHOG.detectMultiScale(src, found, 0, Size(8,8), Size(32,32), 1.05, 2);//对图片进行多尺度行人检测 //src为输入待检测的图片;found为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离; //参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即测试图片每次尺寸缩放增加的比例; //参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。 cout<<"找到的矩形框个数:"<<found.size()<<endl; //找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的话,则取外面最大的那个矩形框放入found_filtered中 for(int i=0; i < found.size(); i++) { Rect r = found[i]; int j=0; for(; j < found.size(); j++) if(j != i && (r & found[j]) == r) break; if( j == found.size()) found_filtered.push_back(r); } //画矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要做一些调整 for(int i=0; i<found_filtered.size(); i++) { Rect r = found_filtered[i]; r.x += cvRound(r.width*0.1); r.width = cvRound(r.width*0.8); r.y += cvRound(r.height*0.07); r.height = cvRound(r.height*0.8); rectangle(src, r.tl(), r.br(), Scalar(0,255,0), 3); } imwrite("d:/SVM/ImgProcessed3.jpg",src); namedWindow("src",0); imshow("src",src); waitKey();//注意:imshow之后必须加waitKey,否则无法显示图像 /******************读入单个64*128的测试图并对其HOG描述子进行分类*********************/ ////读取测试图片(64*128大小),并计算其HOG描述子 //Mat testImg = imread("person014142.jpg"); //Mat testImg = imread("noperson000026.jpg"); //vector<float> descriptor; //hog.compute(testImg,descriptor,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //Mat testFeatureMat = Mat::zeros(1,3780,CV_32FC1);//测试样本的特征向量矩阵 //将计算好的HOG描述子复制到testFeatureMat矩阵中 //for(int i=0; i<descriptor.size(); i++) // testFeatureMat.at<float>(0,i) = descriptor[i]; //用训练好的SVM分类器对测试图片的特征向量进行分类 //int result = svm.predict(testFeatureMat);//返回类标 //cout<<"分类结果:"<<result<<endl; system("pause"); } ```
c++ opnecv遍历文件件
大家好! 我想在ubuntu系统下使用opencv遍历指定文件夹下的所有照片数目,在windows下程序正确,然而在ubuntu下得不到文件夹下照片数目. ```string path = "/home/trm/test/"; string exten = "*.jpeg"; std::vector<std::string> filenames = cv::Directory::GetListFiles(path, exten, false); count = filenames.size(); ``` 核心程序如上: ``` #include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/core/core.hpp> #include <opencv2/contrib/contrib.hpp> #include<iostream> #include<stdio.h> #include<string> #include<dirent.h> //#include <windows.h> using namespace cv; using namespace std; int main() { cv::Directory dir; /*string path = "C:\\Users\\Lenovo\\Documents\\C++study\\cameravideo\\cameravideo"; string exten = "*.jpg"; vector<string> filenames = dir.GetListFiles(path, exten, false);*/ VideoCapture capture(0); Mat frame; if (!capture.isOpened()) { cout << "摄像头打开失败!" << endl; return -1; } char key; char filename[200]; int count = 0; namedWindow("【视频】", 1); namedWindow("【图片】", 1); cout<<file<<endl; while (1) { key = waitKey(50); capture >> frame; imshow("【视频】", frame); string path = "/home/trm/test/"; string exten = "*.jpeg"; std::vector<std::string> filenames = cv::Directory::GetListFiles(path, exten, false); count = filenames.size(); cout<<"filenames:"<<filenames.size()<<endl; //cout<<count<<endl; //cout << count << endl; if (key == 27) break;//按ESC键退出程序 if (key == 32)//按空格键进行拍照 { sprintf(filename, "/home/trm/test/Picture%d.jpeg", 3); imwrite(filename, frame);//图片保存到本工程目录中 imshow("【图片】", frame); } } return 0; } ``` 完整程序
opencv移植到arm上的问题
参考1:http://www.ebaina.com/bbs/forum. ... &extra=page%3D1 参考2: http://ebaina.com/bbs/forum.php? ... mp;highlight=opencv 我用的系统是ubuntu12.04.4 64位,安装了海思HI3515官方配套的SDK,gcc版本是4.6.3,cmake是2.8.10.1,然后新建一个build和output文件夹: root@duhao-virtual-machine:/home/study/hi-opencv-2.4.10# ls build opencv-2.4.10 output test 进入opencv-2.4.10,进行cmake-gui,然后配置是按参考2中的配置,输出选成上面的output目录 之后进入build目录,开始make和make install,最后在output里面生成 include,lib,share,LICENSE 。没有生成bin文件。: root@duhao-virtual-machine:/home/study/hi-opencv-2.4.10/output# ls include lib LICENSE share 然后将include下的opencv和opencv2拷贝到交叉编译器的include下 把lib下的文件也拷贝到交叉编译器的lib文件下 arm-hisiv100-linux-uclibcgnueabi-g++ face.cpp -I/home/study/hi-opencv-2.4.10/output/include/opencv -lopencv_highgui -lopencv_imgproc -lopencv_core -lpthread -lrt -ljpeg -lpng -lxml2 -lopencv_objdetect -o face 来编译以下参考1的程序 /***********Author:9crk 2014-12-24*****************************/ #include "cv.h" #include "highgui.h" #include "stdio.h" /******************for time mesurement*************************/ #include <sys/time.h> struct timeval tpstart,tpend; unsigned long timeuses; void timeRec() { gettimeofday(&tpstart,0); } int timeRep() { gettimeofday(&tpend,0); timeuses=(tpend.tv_sec-tpstart.tv_sec)*1000000+tpend.tv_usec-tpstart.tv_usec; printf("use time: %uus\n",timeuses); return timeuses; } /********************end**************************************/ int main(int argc, char* argv[]) { IplImage* img = NULL; IplImage* cutImg = NULL; CvMemStorage* storage = cvCreateMemStorage(0); CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("./haarcascade_frontalface_alt2.xml", 0, 0, 0); CvSeq* faces; img = cvLoadImage(argv[1], 0); timeRec(); faces = cvHaarDetectObjects(img, cascade, storage, 1.2, 2, 0, cvSize(25,25) ); timeRep(); if (faces->total == 0){ printf("no face!\n"); } cvSetImageROI(img, *((CvRect*)cvGetSeqElem( faces, 0))); cvSaveImage("face.bmp", img); cvResetImageROI(img); printf("face detected! in face.bmp!\n"); } 出现以下错误: /usr/local/hi-arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libxml2.so: warning: gethostbyname is obsolescent, use getnameinfo() instead. /usr/local/hi-arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_objdetect.a(haar.cpp.obj): In function `cvHaarDetectObjectsForROC(void const*, CvHaarClassifierCascade*, CvMemStorage*, std::vector<int, std::allocator<int> >&, std::vector<double, std::allocator<double> >&, double, int, int, CvSize, CvSize, bool)': haar.cpp.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x538): undefined reference to `cvCvtColor' haar.cpp.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x16e8): undefined reference to `cvCanny' /usr/local/hi-arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_objdetect.a(cascadedetect.cpp.obj): In function `cv::CascadeClassifier::detectMultiScale(cv::Mat const&, std::vector<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >&, std::vector<int, std::allocator<int> >&, std::vector<double, std::allocator<double> >&, double, int, int, cv::Size_<int>, cv::Size_<int>, bool)': cascadedetect.cpp.text._ZN2cv17CascadeClassifier16detectMultiScaleERKNS_3MatERSt6vectorINS_5Rect_IiEESaIS6_EERS4_IiSaIiEERS4_IdSaIdEEdiiNS_5Size_IiEESH_b+0x2b4): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' collect2: ld returned 1 exit status 这几个错误不懂要怎么改。希望大神来指导一下,感激不尽啊!!! 上面cmake-gui时的配置如下: ![图片说明](https://img-ask.csdn.net/upload/201506/07/1433672253_982754.png) ![图片说明](https://img-ask.csdn.net/upload/201506/07/1433672221_224787.png) 只是输出改成了上面新建的文件夹output。。。望大神指点一下啊,上面的问题要怎么解决额。
OpenCV函数返回的简单问题
下面是一个OpenCV的小程序: ``` #include <opencv2/opencv.hpp> using namespace cv; using namespace std; template<typename _Tp> vector<_Tp> convertMat2Vector(const Mat &_t1f) { //_t1f.convertTo(t1f, CV_64F); return (vector<_Tp>)(_t1f.reshape(1, 1));//通道数不变,按行转为一行 } template<typename _Tp> cv::Mat convertVector2Mat(vector<_Tp> v,int cn,int rows) { cv::Mat mat = cv::Mat(v);//将vector变成一列的mat cv::Mat dest=mat.reshape(cn, rows); cout << "dest=\n" << dest << endl; return dest; } int main() { int arr[4][3] = { { 1, 1,1 },{ 2, 2,2 },{ 3, 3,3 },{ 4,4, 4 } }; cv::Mat srcData(4, 3, CV_8UC1, arr); cout << "srcData=\n"<< srcData<< endl; vector<uchar> v = convertMat2Vector<uchar>(srcData); cv::Mat dest =convertVector2Mat<uchar>(v,1, 4);//函数里的dest和还回dest的结果为什么不一样的呀? cout << "dest=\n" << dest << endl; system("pause"); waitKey(); return 0; } ``` 运行结果: ![图片说明](https://img-ask.csdn.net/upload/201805/09/1525835984_339212.png) 问题是:各位大神啊,我这哪里出问题?为什么函数里的dest和还回的dest的结果值为什么不一样的呀?
求图像连通区域数的一个代码一直提示vector subscript out of range,求问
skin是用来提取肤色区域的,不加这段可以正常运行,加了就不行了 #include<iostream> #include <string> #include <list> #include <vector> #include <map> #include <stack> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; void Two_Pass(const cv::Mat& binImg, cv::Mat& lableImg) //两遍扫描法 { if (binImg.empty() || binImg.type() != CV_8UC1) { cout<<"no picture"<<endl; return; } // 第一个通路 lableImg.release(); binImg.convertTo(lableImg, CV_32SC1); int label = 1; std::vector<int> labelSet; labelSet.push_back(0); labelSet.push_back(1); int rows = binImg.rows - 1; int cols = binImg.cols - 1; for (int i = 1; i < rows; i++) { int* data_preRow = lableImg.ptr<int>(i-1); int* data_curRow = lableImg.ptr<int>(i); for (int j = 1; j < cols; j++) { if (data_curRow[j] == 1) { std::vector<int> neighborLabels; neighborLabels.reserve(2); int leftPixel = data_curRow[j-1]; int upPixel = data_preRow[j]; if ( leftPixel > 1) { neighborLabels.push_back(leftPixel); } if (upPixel > 1) { neighborLabels.push_back(upPixel); } if (neighborLabels.empty()) { labelSet.push_back(++label); // 不连通,标签+1 data_curRow[j] = label; labelSet[label] = label; } else { std::sort(neighborLabels.begin(), neighborLabels.end()); int smallestLabel = neighborLabels[0]; data_curRow[j] = smallestLabel; // 保存最小等价表 for (size_t k = 1; k < neighborLabels.size(); k++) { int tempLabel = neighborLabels[k]; int& oldSmallestLabel = labelSet[tempLabel]; if (oldSmallestLabel > smallestLabel) { labelSet[oldSmallestLabel] = smallestLabel; oldSmallestLabel = smallestLabel; } else if (oldSmallestLabel < smallestLabel) { labelSet[smallestLabel] = oldSmallestLabel; } } } } } } // 更新等价对列表 // 将最小标号给重复区域 cout<<labelSet.size(); for (size_t i = 2; i < labelSet.size(); i++) { int curLabel = labelSet[i]; int preLabel = labelSet[curLabel]; while (preLabel != curLabel) { curLabel = preLabel; preLabel = labelSet[preLabel]; } labelSet[i] = curLabel; } ; for (int i = 0; i < rows; i++) { int* data = lableImg.ptr<int>(i); for (int j = 0; j < cols; j++) { int& pixelLabel = data[j]; pixelLabel = labelSet[pixelLabel]; } } } //彩色显示 cv::Scalar GetRandomColor() { uchar r = 255 * (rand()/(1.0 + RAND_MAX)); uchar g = 255 * (rand()/(1.0 + RAND_MAX)); uchar b = 255 * (rand()/(1.0 + RAND_MAX)); return cv::Scalar(b,g,r); } void LabelColor(const cv::Mat& labelImg, cv::Mat& colorLabelImg) { if (labelImg.empty() || labelImg.type() != CV_32SC1) { return; } std::map<int, cv::Scalar> colors; int rows = labelImg.rows; int cols = labelImg.cols; colorLabelImg.release(); colorLabelImg.create(rows, cols, CV_8UC3); colorLabelImg = cv::Scalar::all(0); for (int i = 0; i < rows; i++) { const int* data_src = (int*)labelImg.ptr<int>(i); uchar* data_dst = colorLabelImg.ptr<uchar>(i); for (int j = 0; j < cols; j++) { int pixelValue = data_src[j]; if (pixelValue > 1) { if (colors.count(pixelValue) <= 0) { colors[pixelValue] = GetRandomColor(); } cv::Scalar color = colors[pixelValue]; *data_dst++ = color[0]; *data_dst++ = color[1]; *data_dst++ = color[2]; } else { data_dst++; data_dst++; data_dst++; } } } } Mat skin(Mat &img){ Mat out; medianBlur( img, out, 15); // GaussianBlur(image,out,Size(17,17),0,0); //遍历图像得到符合肤色特征的像素点 记录于count int count=0; for(int i=0;i<out.rows;i++) { for(int j=0;j<out.cols;j++) { int r,g,b; //图像的R,G,B信息 b=out.at<Vec3b>(i,j)[0]; g=out.at<Vec3b>(i,j)[1]; r=out.at<Vec3b>(i,j)[2]; // if(i==100&&j==i)cout<<r<<","<<g<<","<<b<<endl; double iYIQ,Cr,Cb; //YIQ,YCbCr颜色空间的I,Cr,Cb值,由转换公式获得 iYIQ = 0.596*(double)r - 0.275*(double)g - 0.321*(double)b; Cb = -0.148*(double)r - 0.291*(double)g + 0.439*(double)b + 128; Cr = 0.439*(double)r - 0.368*(double)g - 0.071*(double)b + 128; // if(i==100&&j==i)cout<<iYIQ<<","<<Cb<<","<<Cr<<endl; if((iYIQ<=85&&iYIQ>=15)&&(Cb>88&&Cb<133)&&(Cr>122&&Cr<169))count++; //if(r>95 && g>40 && b>20 && r>g && r>b && max(r,g,b)-min(r,g,b)>15 && abs(r-g)>15)count++; else {out.at<Vec3b>(i,j)[0]=0;out.at<Vec3b>(i,j)[1]=0;out.at<Vec3b>(i,j)[2]=0;} } } return out; } int main() { cv::Mat binImage = cv::imread("F:\\03.jpg"); Mat out=skin(binImage); imshow("xixi",out); waitKey(0); Mat out1; cv::cvtColor(out,out1,CV_BGR2GRAY); imshow("xixi1",out1); waitKey(0); Mat out2; cv::threshold(out1, out1, 1, 255, CV_THRESH_BINARY_INV); if(out1.empty()==1)cout<<"no picture!!"<<endl; imshow("xixi2",out1); waitKey(0); cv::Mat labelImg; Two_Pass(out1, labelImg); //Seed_Filling(binImage, labelImg); //彩色显示 cv::Mat colorLabelImg; LabelColor(labelImg, colorLabelImg); cv::imshow("colorImg", colorLabelImg); /* //灰度显示 cv::Mat grayImg; labelImg *= 10; labelImg.convertTo(grayImg, CV_8UC1); cv::imshow("labelImg", grayImg); */ cv::waitKey(0); return 0; }
opencv3.0.0出现无法解析的外部命令
opencv3.0.0出现无法解析的外部命令 头文件代码: #if !defined COLORDETECT #define COLORDETECT #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> class ColorDetector { private: // minimum acceptable distance int maxDist; // target color cv::Vec3b target; // image containing color converted image cv::Mat converted; bool useLab; // image containing resulting binary map cv::Mat result; public: // empty constructor // default parameter initialization here ColorDetector() : maxDist(100), target(0, 0, 0), useLab(false) {} // extra constructor for Lab color space example ColorDetector(bool useLab) : maxDist(100), target(0, 0, 0), useLab(useLab) {} // full constructor ColorDetector(uchar blue, uchar green, uchar red, int mxDist = 100, bool useLab = false) : maxDist(mxDist), useLab(useLab) { // target color setTargetColor(blue, green, red); } // Computes the distance from target color. int getDistanceToTargetColor(const cv::Vec3b& color) const { return getColorDistance(color, target); } // Computes the city-block distance between two colors. int getColorDistance(const cv::Vec3b& color1, const cv::Vec3b& color2) const { return abs(color1[0] - color2[0]) + abs(color1[1] - color2[1]) + abs(color1[2] - color2[2]); // Or: // return static_cast<int>(cv::norm<int,3>(cv::Vec3i(color[0]-color2[0],color[1]-color2[1],color[2]-color2[2]))); // Or: // cv::Vec3b dist; // cv::absdiff(color,color2,dist); // return cv::sum(dist)[0]; } // Processes the image. Returns a 1-channel binary image. cv::Mat process(const cv::Mat &image); cv::Mat operator()(const cv::Mat &image) { cv::Mat input; input = image; if (useLab) { // Lab conversion cv::cvtColor(image, input, CV_BGR2Lab); } cv::Mat output; // compute absolute difference with target color cv::absdiff(input, cv::Scalar(target), output); // split the channels into 3 images std::vector<cv::Mat> images; cv::split(output, images); // add the 3 channels (saturation might occurs here) output = images[0] + images[1] + images[2]; // apply threshold cv::threshold(output, // input image output, // output image maxDist, // threshold (must be < 256) 255, // max value cv::THRESH_BINARY_INV); // thresholding type return output; } // Getters and setters // Sets the color distance threshold. // Threshold must be positive, otherwise distance threshold // is set to 0. void setColorDistanceThreshold(int distance) { if (distance < 0) distance = 0; maxDist = distance; } // Gets the color distance threshold int getColorDistanceThreshold() const { return maxDist; } // Sets the color to be detected void setTargetColor(uchar blue, uchar green, uchar red) { // BGR order target = cv::Vec3b(blue, green, red); if (useLab) { // Temporary 1-pixel image cv::Mat tmp(1, 1, CV_8UC3); tmp.at<cv::Vec3b>(0, 0) = cv::Vec3b(blue, green, red); // Converting the target to Lab color space cv::cvtColor(tmp, tmp, CV_BGR2Lab); target = tmp.at<cv::Vec3b>(0, 0); } } // Sets the color to be detected void setTargetColor(cv::Vec3b color) { target = color; } // Gets the color to be detected cv::Vec3b getTargetColor() const { return target; } }; #endif 主函数代码: #include<iostream> #include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/core/core.hpp> #include"colordetector.h" int main() { // 1. Create image processor object ColorDetector cdetect; // 2. Read input image cv::Mat image = cv::imread("Schluss.jpg"); if (image.empty()) return 0; // 3. Set input parameters cdetect.setTargetColor(250, 219, 133); // here blue sky // 4. Process the image and display the result cv::namedWindow("result"); cv::imshow("result", cdetect.process(image)); // or using functor ColorDetector colordetector(250, 219, 133, // color 45, true); // Lab threshold cv::namedWindow("result (functor)"); cv::imshow("result (functor)", colordetector(image)); cv::waitKey(); return 0; } 依赖的库添加了: D:\opencv\build\x64\vc12\lib\opencv_ts300.lib D:\opencv\build\x64\vc12\lib\opencv_world300.lib D:\opencv\build\x64\vc12\staticlib\opencv_imgproc300.lib D:\opencv\build\x64\vc12\staticlib\IlmImf.lib D:\opencv\build\x64\vc12\staticlib\ippicvmt.lib D:\opencv\build\x64\vc12\staticlib\libjpeg.lib D:\opencv\build\x64\vc12\staticlib\libpng.lib D:\opencv\build\x64\vc12\staticlib\libtiff.lib D:\opencv\build\x64\vc12\staticlib\libwebp.lib D:\opencv\build\x64\vc12\staticlib\opencv_calib3d300.lib D:\opencv\build\x64\vc12\staticlib\opencv_core300.lib D:\opencv\build\x64\vc12\staticlib\opencv_features2d300.lib D:\opencv\build\x64\vc12\staticlib\opencv_flann300.lib D:\opencv\build\x64\vc12\staticlib\opencv_hal300.lib D:\opencv\build\x64\vc12\staticlib\opencv_highgui300.lib D:\opencv\build\x64\vc12\staticlib\opencv_imgcodecs300.lib D:\opencv\build\x64\vc12\staticlib\opencv_imgproc300.lib D:\opencv\build\x64\vc12\staticlib\opencv_ml300.lib D:\opencv\build\x64\vc12\staticlib\opencv_objdetect300.lib D:\opencv\build\x64\vc12\staticlib\opencv_photo300.lib D:\opencv\build\x64\vc12\staticlib\opencv_shape300.lib D:\opencv\build\x64\vc12\staticlib\opencv_stitching300.lib D:\opencv\build\x64\vc12\staticlib\opencv_superres300.lib D:\opencv\build\x64\vc12\staticlib\opencv_video300.lib D:\opencv\build\x64\vc12\staticlib\opencv_videoio300.lib D:\opencv\build\x64\vc12\staticlib\opencv_videostab300.lib D:\opencv\build\x64\vc12\staticlib\zlib.lib 解决方案配置是Release x64 刚开始学OpenCV,请各位大佬帮帮我
Win10+VS2015+Opencv3.45 处理照片曝光融合时报错
因项目要对照片进行优化,觉得C++与OpenCV的处理方案最优,但平时不用C++,不太熟悉,现在在运行网上一DEMO时过不去,弄不懂是OpenCV版本问题给还是配置问题,烦请有经验的老大给看看。 <br/><br/> 环境:Win10+VS2015+OpenCV3.45 <br/><br/> 查了不少资料,代码应该没有问题,但在调用OpenCV两个关键位置时一直报错: <br/><br/> 0x00007FFE83A7A839 处(位于 ConsoleApplication3.exe 中)有未经处理的异常: Microsoft C++ 异常: std::length_error,位于内存位置 0x0000000CAEAFEA60 处。 <br/><br/> //图像映射 Ptr<AlignMTB> alignMTB = createAlignMTB(); alignMTB->process(images, images); <br/><br/> // Merge using Exposure Fusion 图像融合 Mat exposureFusion; Ptr<MergeMertens> mergeMertens = createMergeMertens(); mergeMertens->process(images, exposureFusion); <br/><br/> 以下是完整代码:<br/><br/> ``` #include "opencv2/photo.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp" #include <iostream> #include <vector> #include <fstream> using namespace cv; using namespace std; // Read Images void readImages(vector<Mat> &images) { int numImages = 16; static const char* filenames[] = { "./image/memorial0061.jpg", "./image/memorial0062.jpg", "./image/memorial0063.jpg", "./image/memorial0064.jpg", "./image/memorial0065.jpg", "./image/memorial0066.jpg", "./image/memorial0067.jpg", "./image/memorial0068.jpg", "./image/memorial0069.jpg", "./image/memorial0070.jpg", "./image/memorial0071.jpg", "./image/memorial0072.jpg", "./image/memorial0073.jpg", "./image/memorial0074.jpg", "./image/memorial0075.jpg", "./image/memorial0076.jpg" }; //读图 for (int i = 0; i < numImages; i++) { Mat im = imread(filenames[i]); images.push_back(im); } } int main() { // Read images 读取图像 cout << "Reading images ... " << endl; vector<Mat> images; //是否图像映射 bool needsAlignment = true; // Read example images 读取例子图像 readImages(images); //needsAlignment = false; // Align input images if (needsAlignment) { cout << "Aligning images ... " << endl; Ptr<AlignMTB> alignMTB = createAlignMTB(); alignMTB->process(images, images); } else { cout << "Skipping alignment ... " << endl; } // Merge using Exposure Fusion 图像融合 cout << "Merging using Exposure Fusion ... " << endl; Mat exposureFusion; Ptr<MergeMertens> mergeMertens = createMergeMertens(); mergeMertens->process(images, exposureFusion); // Save output image 图像保存 cout << "Saving output ... exposure-fusion.jpg" << endl; imwrite("exposure-fusion.jpg", exposureFusion * 255); waitKey(0); return 0; } ```
opencv使用二维特征点和单映射寻找已知物体,为什么程序一闪而过
程序编译成功,但运行的时候一闪,没有呈现图片。 单步调试的时候,程序就卡在imshow( "Good Matches & Object detection", img_matches );有图片框跳出,但卡住。。。。。 哪里出错了吗?谢谢大家了 #include "stdafx.h" #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/nonfree/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/calib3d/calib3d.hpp" using namespace cv; void readme(); /** @function main */ int main( int argc, char** argv ) { //if( argc != 3 ) //{ readme(); return -1; } Mat img_object = imread( "D:\\12345.jpg", CV_LOAD_IMAGE_GRAYSCALE ); Mat img_scene = imread( "D:\\123456.jpg", CV_LOAD_IMAGE_GRAYSCALE ); if( !img_object.data || !img_scene.data ) { std::cout<< " --(!) Error reading images " << std::endl; return -1; } //-- Step 1: Detect the keypoints using SURF Detector int minHessian = 400; SurfFeatureDetector detector( minHessian ); std::vector<KeyPoint> keypoints_object, keypoints_scene; detector.detect( img_object, keypoints_object ); detector.detect( img_scene, keypoints_scene ); //-- Step 2: Calculate descriptors (feature vectors) SurfDescriptorExtractor extractor; Mat descriptors_object, descriptors_scene; extractor.compute( img_object, keypoints_object, descriptors_object ); extractor.compute( img_scene, keypoints_scene, descriptors_scene ); //-- Step 3: Matching descriptor vectors using FLANN matcher FlannBasedMatcher matcher; std::vector< DMatch > matches; matcher.match( descriptors_object, descriptors_scene, matches ); double max_dist = 0; double min_dist = 100; //-- Quick calculation of max and min distances between keypoints for( int i = 0; i < descriptors_object.rows; i++ ) { double dist = matches[i].distance; if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; } printf("-- Max dist : %f \n", max_dist ); printf("-- Min dist : %f \n", min_dist ); //-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist ) std::vector< DMatch > good_matches; for( int i = 0; i < descriptors_object.rows; i++ ) { if( matches[i].distance < 3*min_dist ) { good_matches.push_back( matches[i]); } } Mat img_matches; drawMatches( img_object, keypoints_object, img_scene, keypoints_scene, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); //-- Localize the object std::vector<Point2f> obj; std::vector<Point2f> scene; for( int i = 0; i < good_matches.size(); i++ ) { //-- Get the keypoints from the good matches obj.push_back( keypoints_object[ good_matches[i].queryIdx ].pt ); scene.push_back( keypoints_scene[ good_matches[i].trainIdx ].pt ); } Mat H = findHomography( obj, scene, CV_RANSAC ); //-- Get the corners from the image_1 ( the object to be "detected" ) std::vector<Point2f> obj_corners(4); obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint( img_object.cols, 0 ); obj_corners[2] = cvPoint( img_object.cols, img_object.rows ); obj_corners[3] = cvPoint( 0, img_object.rows ); std::vector<Point2f> scene_corners(4); perspectiveTransform( obj_corners, scene_corners, H); //-- Draw lines between the corners (the mapped object in the scene - image_2 ) line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0), scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 ); line( img_matches, scene_corners[1] + Point2f( img_object.cols, 0), scene_corners[2] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 ); line( img_matches, scene_corners[2] + Point2f( img_object.cols, 0), scene_corners[3] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 ); line( img_matches, scene_corners[3] + Point2f( img_object.cols, 0), scene_corners[0] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 ); //-- Show detected matches imshow( "Good Matches & Object detection", img_matches ); if (waitKey(30) >= 0) return 0; } /** @function readme */ void readme() { std::cout << " Usage: ./SURF_descriptor <img1> <img2>" << std::endl; }
opencv批量处理图片出现警告
1.代码如下 ``` #include<iostream> #include<time.h> #include<opencv2/opencv.hpp> #include<fstream> using namespace std; using namespace cv; void main() { ifstream file("d:/filelist.txt"); int img_index = 0; while (!file.eof()) { char txt_cont[24]; file.getline(txt_cont,24); char img_file[24],save_file[24]; sprintf(img_file, "d:/pic2/%s", txt_cont); sprintf(save_file, "d:/pic3/%d.jpg", img_index); Mat src = imread(img_file); Mat crs; cvtColor(src,crs,CV_RGB2GRAY); img_index++; imwrite(save_file,crs); } } ``` 运行完出现了如下警告 ![图片说明](https://img-ask.csdn.net/upload/201903/07/1551928452_938435.png) 这是什么意思,该怎么办啊? 2第二种批量处理代码如下 ``` #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <vector> #include <string> #include <fstream> using namespace cv; using namespace std; int main() { std::string pattern_jpg = "D:/pic2/*.png"; std::string savefile="D:/pic3"; std::vector<cv::String> image_files; cv::glob(pattern_jpg, image_files); for (unsigned int frame = 0; frame < image_files.size(); ++frame) //image_file.size()代表文件中总共的图片个数 { Mat image = cv::imread(image_files[frame]); Mat dst; cvtColor(image,dst,CV_RGB2GRAY); imshow("1",dst); imwrite(savefile,dst); waitKey(30); } } ``` 出现了相同警告,请问该如何修改? 谢谢。
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
python学习方法总结(内附python全套学习资料)
不要再问我python好不好学了 我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可以学个调包也没啥问题。。。。。所以python真的是想学就一定能学会的!!!! --------------------华丽的分割线-------------------------------- ...
兼职程序员一般可以从什么平台接私活?
这个问题我进行了系统性的总结,以下将进行言简意赅的说明和渠道提供,希望对各位小猿/小媛们有帮助~ 根据我们的经验,程序员兼职主要分为三种:兼职职位众包、项目整包和自由职业者驻场。 所谓的兼职职位众包,指的是需求方这边有自有工程师配合,只需要某个职位的工程师开发某个模块的项目。比如开发一个 app,后端接口有人开发,但是缺少 iOS 前端开发工程师,那么他们就会发布一个职位招聘前端,来配合公司一...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
JAVA 基础练习题
第一题 1.查看以下代码,并写出结果 public class Test01 { public static void main(String[] args) { int i1 = 5; boolean result = (i1++ &gt; 5) &amp;&amp; (++i1 &gt; 4); System.out.println(result); Sy...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
C++知识点 —— 整合(持续更新中)
本文记录自己在自学C++过程中不同于C的一些知识点,适合于有C语言基础的同学阅读。如果纰漏,欢迎回复指正 目录 第一部分 基础知识 一、HelloWorld与命名空间 二、引用和引用参数 2.1引用的定义 2.2 将引用用作函数参数 2.3 将引用用于类对象 2.4 引用和继承 2.5 何时使用引用参数 2.6 引用和指针的区别 三、内联函数 四、默认参数的...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
Python实例大全(基于Python3.7.4)
博客说明: 这是自己写的有关python语言的一篇综合博客。 只作为知识广度和编程技巧学习,不过于追究学习深度,点到即止、会用即可。 主要是基础语句,如三大控制语句(顺序、分支、循环),随机数的生成,数据类型的区分和使用; 也会涉及常用的算法和数据结构,以及面试题相关经验; 主体部分是针对python的数据挖掘和数据分析,主要先攻爬虫方向:正则表达式匹配,常用数据清洗办法,scrapy及其他爬虫框架,数据存储方式及其实现; 最后还会粗略涉及人工智能领域,玩转大数据与云计算、进行相关的预测和分析。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
机械转行java自学经历,零基础学java,血泪总结的干货
机械转行java自学经历,零基础学java,血泪总结的干货 据说,再恩爱的夫妻,一生中都有100次想离婚的念头和50次想掐死对方的冲动。 求职路上亦是如此,打开这篇文章,相信你也有转行的想法。和身边的朋友聊过,入职后的他们,或多或少对现在的职位都有些不满,都有过转行的冲动。 可他们只是想,而我真的这样做了。 下面就介绍下我转行的血泪史。 我为什么要转行 高中复读了一年,考了个双非院校的机械。当时...
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
【Linux系统编程】Linux信号列表
00. 目录 文章目录00. 目录01. Linux信号编号02. 信号简介03. 特殊信号04. 附录 01. Linux信号编号 在 Linux 下,每个信号的名字都以字符 SIG 开头,每个信号和一个数字编码相对应,在头文件 signum.h 中,这些信号都被定义为正整数。信号名定义路径:/usr/include/i386-linux-gnu/bits/signum.h 要想查看这些信号和...
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
借助AI力量,谷歌解开生命奥秘?
全文共4484字,预计学习时长8分钟 Paweł Czerwiński发布在 Unsplash上的原图 假如疾病不复存在会发生什么?如果我们能像大自然一样迅速获取能量又会发生什么?要是我们能够在极短时间内循环塑料、废油、或其它的一些物质呢?如果人类能够解开生命的奥秘,那么以上这些想象将在未来成为现实。人工智能企业DeepMind的数据科学分析师日前在此领域有了重大发现。以下为具体内容:...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
相关热词 c#委托 逆变与协变 c#新建一个项目 c#获取dll文件路径 c#子窗体调用主窗体事件 c# 拷贝目录 c# 调用cef 网页填表c#源代码 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天
立即提问