Znn3bq.jpeg
²é¿´: 1084  |  »Ø¸´: 2
µ±Ç°Ö»ÏÔʾÂú×ãÖ¸¶¨Ìõ¼þµÄ»ØÌû£¬µã»÷ÕâÀï²é¿´±¾»°ÌâµÄËùÓлØÌû

yadan33

гæ (³õÈëÎÄ̳)

[½»Á÷] opencvÊý¾Ý½á¹¹ ÒÑÓÐ2È˲ÎÓë

ת×Ô£ºhttp://blog.csdn.net/thefutureisour/article/details/8455342
×î½üÔÚд×Ô¼ºµÄËã·¨£¬Æäʵ¾ÍÊǶÔһЩ´«Í³Ëã·¨µÄ¸Ä½ø¡£´«Í³Ëã·¨¿ÉÒԲο¼opecvµÄÔ´´úÂë¡£ÔÚÔĶÁÔ´´úÂëµÄ¹ý³ÌÖУ¬ÎÒÂýÂýÁì»áµ½ÁËopencvµÄÇ¿´óÖ®´¦£¬²¢²»ÊÇÒòΪËüʵÏÖÁ˸÷ÖÖËã·¨£¬¶øÊÇÔÚÓÚËü¶ÔÓÚ»ù±¾Êý¾Ý½á¹¹µÄÉè¼Æ£¬ÊÇµÃÆäËûÈË¿ÉÒԺܷ½±ãµÄʹÓÃÕâЩÊý¾Ý½á¹¹À´ÊµÏÖ×Ô¼ºµÄËã·¨¡£ÔÚ°ïÖúÊÖ²áÖУ¬ÒѾ­¶ÔÓÚÕâЩÊý¾Ý½á¹¹ÓбȽÏÏêϸµÄÃèÊöÁË¡£½ñÌìÎÒ¾ÍΪӢÓï²»ºÃµÄº¢×ÓÃÇ·þÎñһϣ¬¼òµ¥µÄ½éÉÜÒ»ÏÂËüÃÇ¡£


Ê×ÏȽéÉÜ2άµã¶ÔPoint_£¬ËüµÄÊÇÒ»¸öÄ£°åÀà¡£ÎÒÃÇ¿ÉÒÔÖ±½Ó·ÃÎÊÊý¾Ý³ÉÔ±x,y¡£Ëü²»½ö¶¨ÁË+¡¢-¡¢==¡¢!=Õâ4¸ö»ù±¾µÄ²Ù×÷£¬»¹¶¨ÒåÁ˵ã³Ë¡¢²æ³ËµÈ²Ù×÷¡£ÌرðµÄÕâ¸öÀ໹ÌṩÁËinsideº¯ÊýÀ´ÅжÏÒ»¸öµãÊÇ·ñÔÚ¾ØÐÎÇøÓòÄÚ¡£´ËÍ⣬»¹¶¨ÒåÁËһЩÆäËûµÄÀàÐÍת»¯º¯Êý£¬±ÈÈçת»¯Îª1.X°æ±¾µÄCvPoint¡£
ΪÁË·½±ãʹÓã¬opencvÓÖ¶Ô³£ÓõÄÀàÐͽøÐÐÁ˶¨Ò壺
typedef Point_<int> Point2i;
typedef Point2i Point;
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;


ͬÀí»¹ÓÐPoint3_£¬Ö»²»¹ýËüÊÇÒ»¸ö3άµã(x,y,z)¶øÒÑ¡£ËüµÄ³£ÓÃÀàÐÍÊÇ£º
typedef Point3_<int> Point3i;
typedef Point3_<float> Point3f;
typedef Point3_<double> Point3d;


½éÉÜÍêµã£¬¾Í¿ÉÒÔ½éÉÜSize_ÁË¡£ËüÒ²ÊÇÄ£°åÀà¡£
typedef Size_<int> Size2i;
typedef Size2i Size;
typedef Size_<float> Size2f
SizeÄܹ»·ÃÎʵijÉÔ±±äÁ¿ÊÇheightºÍwidth¡£»¹¶¨ÒåÁËareaº¯ÊýÀ´ÇóÃæ»ý¡£ÆäËûµÄ²Ù×÷»ù±¾¶¼ÊÇÀàÐÍת»¯º¯Êý¡£


ÏÂÀ´½éÉÜRect_Ä£°æÀà¡£ËüÊÇÓÉ×óÉϽǵãºÍ³¤¶È¡¢¿í¶È¶¨ÒåµÄ¡£ÔÚopecvÖУ¬Ò»°ã¶¨ÒåΪ×ó¿ªÓÒ±ÕÇø¼ä¡£ÓÐÒâ˼µÄÊÇ£¬Õâ¸öÀྐྵȻҲÌṩÁËÒ»¸öRect+PointµÄº¯Êý£¬×÷ÓÃÊǶԾØÐÎµÄÆ«ÒÆ£¬»¹ÓÐÒ»¸öRect + SizeµÄº¯Êý£¬ÔÚ×óÉϽDz»±äµÄÇé¿öÏ£¬ÖØÐµ÷Õû¾ØÐεĴóС¡£ÆäËûµÄ²Ù×÷»¹ÓÐÓë&ºÍ|£¬ÊÇÇóÁ½¸ö¾ØÐεĽ»¼¯ºÍ²¢¼¯¡£


³ýÁË»ù±¾µÄ¾ØÐÎÖ®Í⣬opecv»¹ÌṩÁËÒ»¸ö¿ÉÒÔÐýתµÄ¾ØÐÎRotatedRect£¬ËüÊÇÓÉÖÐÐÄ¡¢±ä³¤¡¢Ðýת½Ç¶È¾ö¶¨µÄ¡£Äã¿ÉÒÔ·ÃÎÊËüµÄÕâÈý¸ö³ÉÔ±£¬Ò²¿ÉÒÔʹÓÃpointsº¯Êý·µ»ØËüµÄ4¸ö¶¥µã£¬Ê¹ÓÃboundingRectÇó³öËüµÄÍâ½Ó¾ØÐΣ¨·ÇÐýת£©£¬ÏÂÃæÊÇÒ»¸öÀý×Ó£º

[cpp] view plaincopy
int main(void)  
{  
    Mat bg(200,200,CV_8UC3,Scalar(0));  
    imshow("",bg);  
    RotatedRect rRect(Point2f(100,100),Size(100,100),40);   
    Point2f vertices[4];  
    rRect.points(vertices);  
    for(int i = 0; i < 4;++i)  
        line(bg,vertices,vertices[(i+1)%4],Scalar(0,255,0));  
    Rect brect = rRect.boundingRect();  
    rectangle(bg,brect,Scalar(255,0,0));  
    imshow("",bg);  
    waitKey();  
    return 0;  
}  

ÏÂÃæ½éÉÜMatxÀ࣬ÕâÒ²ÊÇÒ»¸öÄ£°åÀ࣬ÓÃÀ´¼Ç¼һЩСµÄ¾ØÐΡ£ÕâЩ¾ØÐÎÔÚ±àÒëǰ´óС¾Í¹Ì¶¨ÁË£º
typedef Matx<float, 1, 2> Matx12f;
typedef Matx<double, 1, 2> Matx12d;
...
typedef Matx<float, 1, 6> Matx16f;
typedef Matx<double, 1, 6> Matx16d;
typedef Matx<float, 2, 1> Matx21f;
typedef Matx<double, 2, 1> Matx21d;
...
typedef Matx<float, 6, 1> Matx61f;
typedef Matx<double, 6, 1> Matx61d;
typedef Matx<float, 2, 2> Matx22f;
typedef Matx<double, 2, 2> Matx22d;
...
typedef Matx<float, 6, 6> Matx66f;
typedef Matx<double, 6, 6> Matx66d;


Èç¹ûҪʹÓÃÁé»îµÄ¾ØÐΣ¬»¹ÊÇÓÃMat°É¡£


ÏÂÃæ½éÉÜVecÀ࣬ËüÆäʵÊÇÔªËØ½ÏÉÙµÄÏòÁ¿¡£
typedef Vec<uchar, 2> Vec2b;
typedef Vec<uchar, 3> Vec3b;
typedef Vec<uchar, 4> Vec4b;
typedef Vec<short, 2> Vec2s;
typedef Vec<short, 3> Vec3s;
typedef Vec<short, 4> Vec4s;
typedef Vec<int, 2> Vec2i;
typedef Vec<int, 3> Vec3i;
typedef Vec<int, 4> Vec4i;
typedef Vec<float, 2> Vec2f;
typedef Vec<float, 3> Vec3f;
typedef Vec<float, 4> Vec4f;
typedef Vec<float, 6> Vec6f;
typedef Vec<double, 2> Vec2d;
typedef Vec<double, 3> Vec3d;
typedef Vec<double, 4> Vec4d;
typedef Vec<double, 6> Vec6d;
ËüÖ§³Ö¼Ó¡¢¼õ¡¢Êý³Ë¡¢ÏàµÈ¡¢²»µÈ¡¢Çó·¶ÊýµÈÔËËã¡£




Scalar_ÀàÆäʵÊÇÓÃVec<tp,4>ÅÉÉúÏÂÀ´µÄ£¬Ò²¾ÍÊÇ˵£¬ËüÊÇÒ»¸ö4Ôª×飺typedef Scalar_<double> Scalar;
Ëûͨ³£ÓÃÀ´´«µÝÏñËØ¡£


RangeÀàÓÃÀ´Ö¸¶¨Á¬ÐøµÄ×ÓÐòÁС£±ÈÈç¾ØÕóµÄÒ»²¿·Ö£¬±È½Ï¼òµ¥£¬ÎÒÃÇÖ±½Ó¿´¶¨Ò壺
[cpp] view plaincopy
class CV_EXPORTS Range  
{  
public:  
    Range();  
    Range(int _start, int _end);  
    Range(const CvSlice& slice);  
    int size() const;  
    bool empty() const;  
    static Range all();  
    operator CvSlice() const;  
  
    int start, end;  
};  

½²ÍêÕâЩ¼òµ¥µÄÀàÐÍÖ®ºó£¬ÎÒÃÇ¿´Ò»¸ö·Ç³£ÖØÒªµÄÀàÐÍ£»Mat¡£MatÊÇopencvÖеÄÒ»Öַdz£ÖØÒªµÄÊý¾Ý½á¹¹£¬µ±¸Õ¿ªÊ¼Ê¹ÓÃʱ£¬ÎÒ½ö½ö°ÑËüµ±×öÒ»¸ö´¢´æÍ¼ÏñµÄÊý¾Ý½á¹¹£¬ºóÀ´²ÅÂýÂýÀí½â£¬Ëü²»½ö¿ÉÒÔ´¢´æ¶þά¾ØÕó£¬Ò²¿ÉÒÔ´¢´æ¸ßά¾ØÕó£¬ÕâÔÚģʽʶ±ð¡¢»úÆ÷ѧϰÖÐÊǷdz£³£Óõġ£¶ÔÓÚÕâÀàÎÊÌ⣬ÎÒÃǾÍûÓбØÒª×Ô¼ºÊÖ¶¯·ÖÅäÄÚ´æÁË£¬Ö±½ÓʹÓÃËüÃǾͿÉÒÔÁË¡£Õâ¸öÀàµÄÄÚÈݺܶ࣬µ«opencvµÄ°ïÖúÊֲᣬºÜºÃµÄ°ïÎÒÃÇÀíÇåµÄÆäÖеÄÄÚÈÝ¡£
ÆäÖеĺËÐÄÊý¾Ý³ÉÔ±dataµÄ´¢´æ·½Ê½ÔÚǰһƪ²©¿Í¡¶ÎÒµÄOpenCVѧϰ±Ê¼Ç£¨23£©£ºMatÖÐʵ¼ÊÊý¾ÝÊÇÈçºÎ±£´æµÄ¡·ÖÐÒѾ­ÌÖÂÛ¹ýÁË£¬ÕâÀïÖ»×öÒ»¸ö²¹³ä£¬¾ÍÊǶàάÇé¿ö£º
[cpp] view plaincopy
int main(void)  
{  
    int sz[]={4,5,6};  
    Mat img(3,sz,CV_8U);//3άÊý×é  
    cout<<img.dims<<endl;  
    cout<<img.size[0]<<endl;  
    cout<<img.size[1]<<endl;  
    cout<<img.size[2]<<endl;  
  
    cout<<img.step[0]<<endl;  
    cout<<img.step[1]<<endl;  
    cout<<img.step[2]<<endl;  
    //±éÀúÿ¸öÔªËØ  
    for(int i = 0; i < 4;++i)  
    {  
        for(int j = 0; j < 5;++j)  
        {  
            for(int k = 0; k < 6;++k)  
            {  
                cout<<(int)*(B.data + B.step[0]*i + B.step[1]*j + B.step[2]*k)<<endl;  
            }  
        }  
    }  
    return 0;  
}  
ÎÒÃǽ¨Á¢ÁËÒ»¸ö3άÊý×飬Êý×éµÄÿһά³¤¶È·Ö±ðΪ4,5,6¡£Õâ¿ÉÒÔͨ¹ýsizeÀ´»ñµÃ¡£ÓÉÓÚÿ¸öµÚһάÏòÁ¿Öаüº¬5¸öµÚ¶þάµÄÊý×飬¶øÃ¿¸öµÚ¶þάÊý×éÖÐÓÖ°üº¬ÁË6¸öµÚÈýάÊý×飬ËùÒÔµÚһάÿÔö¼ÓÒ»²½£¬Ï൱ÓÚÕû¸öµØÖ·Òƶ¯ÁË5*6.ËùÒÔstep[0],µÈÓÚ30.
ÏÂÃæÎÒÃÇÖ÷ÒªÊÇ¿´¿´MatÌṩµÄº¯Êý¡£
Ê×ÏÈÊǹ¹Ô캯Êý£¬¹â¹¹Ô캯Êý¾ÍÓкܶàÖÖ£¬ÕâÀï½éÉܼ¸ÖÖ³£Óõķ½Ê½£º
1.ʹÓÃ(nrows, ncols, type)£¬³õʼ»¯2ά¾ØÕó
// ´´½¨Ò»¸ö7*7µÄ2ͨµÀ¸¡µã¾ØÕó£¬Í¨³£ÕâÑùµÄ¾ØÕóÓÃÀ´±íʾ¸´¾ØÕó
Mat M(7,7,CV_32FC2,Scalar(1,3));
//¸Ä±äΪ100*60µÄ15ͨµÀuchar¾ØÕó£¬Ô­ÏȵÄÊý¾Ý½«»á±»ÊÍ·Å
M.create(100,60,CV_8UC(15));
´´½¨¸ßά¾ØÕó
//´´½¨100*100*100µÄ3ά¾ØÕó
int sz[] = {100, 100, 100};
Mat bigCube(3, sz, CV_8U, Scalar::all(0));


ÏÂÃæÊÇһЩ¼òµ¥µÄ¶ÔÕûÐС¢ÕûÁеIJÙ×÷
// µÚ5ÐÐ*3 + µÚ3ÐУ¬ÕâÑùµÄ²Ù×÷ÔÚÏßÐÔ´úÊýÖкܳ£¼û
M.row(3) = M.row(3) + M.row(5)*3;


// °ÑµÚ7Áп½±´µ½µÚ1ÁÐ
// M.col(1) = M.col(7); // ²»ÄÜÕâÑùд
Mat M1 = M.col(1);
M.col(7).copyTo(M1);


ÓÃԴͼÏñµÄÒ»²¿·Ö´´½¨ÐÂͼÏñ
// ´´½¨Ò»¸ö320*240µÄͼÏñ
Mat img(Size(320,240),CV_8UC3);
// Ñ¡Ôñ¸ÐÐËÈ¤ÇøÓò
Mat roi(img, Rect(10,10,100,100));
// ½«ÇøÓò¸ÄΪÂÌÉ«£¬Ô­Í¼ÏñÒ²»á·¢ÉúÐÞ¸Ä
roi = Scalar(0,255,0);


BÊÇAµÄ[1,3)ÁУ¬¶ÔBµÄÐ޸ĻáÓ°ÏìA
[cpp] view plaincopy
int main(void)  
{  
    Mat A = Mat::eye(5,5,CV_8U);  
  
    Mat B = A(Range::all(),Range(1,3));  
    B.setTo(100);  
    for(int i = 0; i < 5;++i)  
    {  
        for(int j = 0; j < 5;++j)  
        {  
            cout<<(int)A.at<uchar>(i,j)<<endl;  
        }  
    }  
    return 0;  
}  

Èç¹ûÐèÒªÉ±´£¬ÔòʹÓÃclone·½·¨¡£


¶ÔÓÚ³õʼ»¯Mat£¬»¹ÓÐÆäËûµÄһЩ·½·¨£º
±ÈÈçMatlab·ç¸ñµÄ zeros(), ones(), eye()£º
M += Mat::eye(M.rows, M.cols, CV_64F);


Mat M = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);


Èç¹ûÊÇ´¦Àí¡°ÍâÀ´¡±µÄÊý¾Ý£¬ÄÇôÔòÔÚ¹¹Ô캯ÊýÖмÓÉÏdataÔò»á·Ç³£·½±ãµÄ½«ÍâÀ´Êý¾Ýת»¯ÎªMat½á¹¹£º
[cpp] view plaincopy
void process_video_frame(const unsigned char* pixels,int width, int height, int step)  
{  
    Mat img(height, width, CV_8UC3, pixels, step);  
    GaussianBlur(img, img, Size(7,7), 1.5, 1.5);  
}  
  
double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}};  
Mat M = Mat(3, 3, CV_64F, m).inv();  

ÌØ±ðµÄ£¬¶ÔÓÚÓëopencv1.XÖеÄIplImage½á¹¹µÄ½»»¥£º
[cpp] view plaincopy
IplImage* img = cvLoadImage("greatwave.jpg", 1);  
Mat mtx(img); // convert IplImage* -> Mat  
CvMat oldmat = mtx; // convert Mat -> CvMat  

˵ÍêÁË£¬¹¹Ôì¡¢³õʼ»¯£¬Ó¦¸ÃÌÖÂÛÔªËØ·ÃÎʵķ½·¨£¬Õâ¸öÔÚ֮ǰµÄ²©¿ÍÖÐÒ²ÓÐÌá¹ý¡¶ÎÒµÄOpenCVѧϰ±Ê¼Ç£¨¶þ£©£º²Ù×÷ÿ¸öÏñËØ¡·ÕâÀï¾Í²»ÔÙÖØ¸´ÁË¡£
»Ø¸´´ËÂ¥
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Damons

½ð³æ (ÕýʽдÊÖ)

ÉáµÃ²»ÔøÉáµÃµÄÉáµÃ»áÉáµÃ£¬Ï°¹ß²»ÔøÏ°¹ßµÄϰ¹ß»áϰ¹ß¡£
3Â¥2016-01-14 00:11:02
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
²é¿´È«²¿ 3 ¸ö»Ø´ð

_tony

ľ³æ (СÓÐÃûÆø)

2Â¥2016-01-04 16:28:15
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[Óлú½»Á÷] ¶þ±½¼×ͪËáÀàÑÜÉúÎï 50+3 С°×°®Ö÷ÈË 2026-04-17 6/300 2026-04-17 18:47 by kf2781974
[¿¼ÑÐ] ½ÓÊÜÈκε÷¼Á +4 Ò²¾ÍÊÇÀõ×Ó 2026-04-17 4/200 2026-04-17 17:57 by Equinoxhua
[¿¼ÑÐ] ±¾ÈËÅ®º¢ +8 ºðºð£¬ 2026-04-10 10/500 2026-04-17 11:28 by 4444si
[ÂÛÎÄͶ¸å] ÓÐûÓнÓÊձȽϿìµÄsciÆÚ¿¯Ñ½£¬×îºÃÔÚÒ»¸öÔÂÖ®Äڵģ¬ÑÐÈýº¢×ÓÇó±ÏÒµ 20+4 Ö®»¤×Å 2026-04-16 5/250 2026-04-17 10:02 by bobvan
[¿¼ÑÐ] ¿ÒÇëÓÐѧУÊÕÁô +8 ¿Â»´È» 2026-04-12 8/400 2026-04-17 09:34 by Öí»á·É
[¿¼ÑÐ] ¼±Ðèµ÷¼Á +7 ¾ø²»·ÅÆú22 2026-04-15 7/350 2026-04-16 22:09 by SUSE_CL
[¿¼ÑÐ] Çóµ÷¼Á +8 СÄô°®Ñ§Ï° 2026-04-16 10/500 2026-04-16 22:06 by 1shin_ichi
[¿¼ÑÐ] 0831ÉúÒ½¹¤µÚÒ»ÂÖµ÷¼Áʧ°ÜÇóÖú +14 СÐÜî£î£_s 2026-04-11 18/900 2026-04-16 20:41 by lpl364211
[¿¼ÑÐ] Ò»Ö¾Ô¸»¦9£¬ÉúÎïѧ326Çóµ÷¼Á +9 Áõīī 2026-04-15 9/450 2026-04-16 17:14 by ´Þ´Þ´Þcccc
[¿¼ÑÐ] 291Çóµ÷¼Á +11 ¹ØÒä±±. 2026-04-14 11/550 2026-04-16 15:18 by jiahl2024
[¿¼ÑÐ] 322Çóµ÷¼Á +8 123°²¿µ 2026-04-12 15/750 2026-04-16 11:07 by Espannnnnol
[¿¼ÑÐ] 289 ·Ö105500ҩѧר˶Çóµ÷¼Á(ÕÒBÇøÑ§Ð£) +4 °×ÔÆ123456789 2026-04-13 4/200 2026-04-16 00:18 by ·ÛÇßÈô³¾
[¿¼ÑÐ] Ò»Ö¾Ô¸AÇø211£¬22408 321Çóµ÷¼Á +6 ËæÐÄËùÓû¡î 2026-04-15 7/350 2026-04-15 21:45 by lbsjt
[¿¼ÑÐ] Çóµ÷¼Á +3 ÎÒ°®¸ßÊý¸ßÊý°®Î 2026-04-12 3/150 2026-04-14 01:00 by Íõ¬Bè±
[¿¼ÑÐ] 302Çóµ÷¼Á +10 Ò×£¡? 2026-04-13 10/500 2026-04-13 19:04 by lbsjt
[¿¼ÑÐ] 0854µ÷¼Á +10 ³¤¹­°Á 2026-04-11 11/550 2026-04-13 10:38 by wp06
[¿¼ÑÐ] 344 ²ÄÁÏרҵ Çóµ÷¼Á211 ÎÞµØÓòÒªÇó +8 hualkop 2026-04-11 8/400 2026-04-12 22:24 by fqwang
[¿¼ÑÐ] 346·Ö£¬¹¤¿Æ0854Çóµ÷¼Á£¬×¨Ë¶ +6 moser233 2026-04-12 7/350 2026-04-12 22:11 by fqwang
[¿¼ÑÐ] 283Çóµ÷¼Á 086004¿¼Ó¢¶þÊý¶þ +17 ÄǸöàà×Ó 2026-04-10 18/900 2026-04-11 16:27 by Ã÷Ô´ËʱÓÐ
[¿¼ÑÐ] µ÷¼ÁÇóÖú +6 ¹ûÈ»ÓÐÎÒ 2026-04-11 7/350 2026-04-11 16:22 by Ã÷Ô´ËʱÓÐ
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û