[BUG 记录]

1.
      float ratio =1.45;
int left_x=chepai_r.x-(int)(chepai_r.width*ratio);
             int right_x=chepai_r.x+chepai_r.width+(int)(chepai_r.width*ratio);
             int down_y=chepai_r.y+chepai_r.height+(int)(0.75*chepai_r.width);
             int up_y=chepai_r.y-(int)(chepai_r.width*1.35);
             Mat m_deal=img_roi_CheSheng.clone();
             for(int m=0;m<m_deal.rows;m++)
                 for(int n=chepai_r.x;n<chepai_r.x+chepai_r.width;n++)
                 {
                     m_deal.at<Vec3b>(m,n)[0]=0;
                     m_deal.at<Vec3b>(m,n)[1]=0;
                     m_deal.at<Vec3b>(m,n)[2]=0;
                 }
              //int tmp=(int)ratio*chepai_r.width;
             if(chepai_r.x>=(int)(ratio*chepai_r.width))//(int)ratio*chepai_r.width)
             {
                 chepai_leftx2Chewei=(int)(chepai_r.width*ratio);//(int)chepai_r.width*ratio;
             }
             else
             {
                 chepai_leftx2Chewei=chepai_r.x;
             }
             chepai_rightx2Chewei=chepai_leftx2Chewei+chepai_r.width;
搞死人的一个bug,昨天晚上排查了一晚,感觉还是没问题啊~~~!!一大早头脑可能清醒一点,打断点调试,发现不是我想的那样子,一开始的int tmp=(int)ratio*chepai_r.width;  我发现int 只对ratio起作用,直接为1了~~~~~呜呜呜,原来强制类型转换只对临近的起作用,加括号哦啊啊

2.

vector<int>vec;
......
if(vec.size()>=2)
{vec.erase(vec.begin());
vec.erase(vec.end())};
//这里看到删第一个元素是begin ,然后理所当然的认为删除最后一个元素就是end,呃呃呃,调试又不报错直接崩了,这类错误最难找。
//原来end指向了容器元素最后一个元素的下一个位置,要删最后一个元素需要这样,vec.erase(vec.end()-1)。
//看到网上说也可以这样删最后一个元素,vec.pop_back()。

3.

       r_offset.y = r_chelian.y+r_chelian.height*1.2;
        r_offset.x = r_chelian.x -r_chelian.width/16;
       r_offset.width = (float)(1.0*(1+1/8))*(float)r_chelian.width;
各种加float没有用

然后发现-r_chelian.width/16;有效果 然后就这么整了 r_offset.width = r_chelian.width+r_chelian.width/16+r_chelian.width/16; 恩,有用,但是刚刚那么写应该也有用的啊

叫来gkj,他说你这个1/8等于0啊1 哦,原来。。

 r_offset.width = (1.0*(1+1.0/8))*r_chelian.width; 这么写就可以的


4. 默认参数的问题

XXX.h

bool fun(cv::Mat src, cv::Mat &dst,float ratio = 10.0);

aaa.cpp

bool lstm_img_standardization(cv::Mat src, cv::Mat &dst,float ratio)
//http://www.cnblogs.com/graphics/archive/2010/07/15/1778291.html


5.

#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;
 int main()
{

    HOGDescriptor hog(Size(64,32),Size(8,8),Size(4,4),Size(2,2),9);
    int DescriptorDim;
   // MySVM svm;


//Ptr<SVM> svm = SVM::create();
    Ptr<ml::SVM> svm = ml::SVM::create();
       svm->setType(ml::SVM::C_SVC);
       svm->setKernel(ml::SVM::RBF);
       TermCriteria criteria = cvTermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
        svm->setTermCriteria(criteria);

老提示 对‘cv::ml::SVM::create()’未定义的引用    这种库的问题最烦.当然我找了好久,发现pro里面的是:

LIBS += -lopencv_core \
        -lopencv_highgui \
        -lopencv_imgproc \
        -lopencv_imgcodecs \
        -lopencv_videoio \
       # -lopencv_ml    #需要加上这个

LIBS += -L/usr/local/libs \  #这里也是因为提示 HOGDescriptor 未定义我百度加上来的
         -lopencv_objdetect  # https://stackoverflow.com/questions/30802063/opencv-undefined-reference-to-vtable-for-cvhogdescriptor

这两个问题应该是一样的问题,就是没有加载相应的库,因为这两个库平常没用到,所以一般是没有加上的.找这个库就是到opencv的安装目录lib文件夹下面找

6. 帮同事解决编译caffe错误问题,提示opencv3.2 conflict with opencv2.4 我第一反应就是问她opencv装在哪里,一看她是默认安装路径的,那就是把opencv3.2装在系统默认路径下与系统自带的opencv2.4冲突了,然后让她把装的opencv3.2卸载掉,指定3.2安装路径,就是敲笔记上的那一堆命名CMake -D withqt ON。。。。 然后报错fatal error: Eigen/Eigenvalues: No such file or directory,然后按照百度说在cmake的时候可以加上WITH_EGEN=OFF。。然后又make clean 重新敲命令加上WITH_EGEN=OFF 可是过了一会儿还是这个错误啊~~~!!然后又怀疑是没有安装EGEN 然后又百度敲了指令安装库,然后再重新编译,然后还是报一样的错误,无解,尴尬。。。然后去找tls,童老师用cmake -gui图形界面安装,勾选一些项目,嗯,没有报错。然后再重新编译caffe。。然后又报同样的错误,提示opencv3.2 conflict with opencv2.4 。。。无解。。然后tls说,要在那个makefile 还是makefile.config 配置opencv路径的 /usr/local/lib /usr/lib /usr/lib/x86_64-Linux-gnu  要把opencv3.2的放在前面,这样会优先找到opencv3.2 嗯,可行!

猜你喜欢

转载自blog.csdn.net/yang332233/article/details/77862460