Znn3bq.jpeg
²é¿´: 1078  |  »Ø¸´: 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µÄ»ØÌû

_tony

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

2Â¥2016-01-04 16:28:15
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

Damons

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

ÉáµÃ²»ÔøÉáµÃµÄÉáµÃ»áÉáµÃ£¬Ï°¹ß²»ÔøÏ°¹ßµÄϰ¹ß»áϰ¹ß¡£
3Â¥2016-01-14 00:11:02
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ yadan33 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 298Çóµ÷¼Á +5 ²ÐºÉÐÂÁø 2026-04-07 5/250 2026-04-11 11:02 by ×ÏêØ×ÏÆå
[¿¼ÑÐ] ÉúÎïѧµ÷¼Á ¿Éµ÷¼Áµ½ÉúÎïÓëÒ½Ò© +8 ÀîÕþÓ¨ 2026-04-06 9/450 2026-04-11 10:36 by wwj2530616
[¿¼ÑÐ] 080100Á¦Ñ§316Çóµ÷¼Á +8 L_Hairui 2026-04-07 8/400 2026-04-11 10:00 by zhq0425
[¿¼ÑÐ] 291 Çóµ÷¼Á +29 »¯¹¤2026½ì±ÏÒµÉ 2026-04-09 29/1450 2026-04-10 22:55 by dick_runner
[¿¼ÑÐ] µ÷¼Á +19 СÕÅZA 2026-04-10 20/1000 2026-04-10 22:08 by Öí»á·É
[¿¼ÑÐ] È˹¤ÖÇÄÜ320µ÷¼Á08¹¤À໹Óлú»áÂð +11 Õñ¡ªTZ 2026-04-10 11/550 2026-04-10 21:51 by blankyung
[¿¼ÑÐ] ¼ÆËã»úÀàÇóµ÷¼Á£¬22408-274·Ö +7 Éϰ¶deС³æ 2026-04-09 8/400 2026-04-10 19:56 by fxue1114
[¿¼ÑÐ] ±¾9 Ò»Ö¾Ô¸Î÷¹¤´ó085601 324Çóµ÷¼Á +5 wysyjs25 2026-04-10 5/250 2026-04-10 16:57 by luoyongfeng
[¿¼ÑÐ] Ò»Ö¾Ô¸985³õÊÔ354·ÖÉúÎïµ÷¼Á +3 031001 2026-04-06 3/150 2026-04-09 00:30 by Evan_Liu
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÄÏʦ·¶´óѧ0702ÎïÀíѧ305µ÷¼Á +4 Äî³£°² 2026-04-07 6/300 2026-04-08 22:53 by bljnqdcc
[¿¼ÑÐ] »¯Ñ§0703-Ò»Ö¾Ô¸211-338·ÖÇóµ÷¼Á +10 vants 2026-04-05 11/550 2026-04-08 16:02 by screening
[¿¼ÑÐ] 287Çóµ÷¼Á +6 Fnhc 2026-04-07 6/300 2026-04-08 10:05 by xingguangj
[¿¼ÑÐ] 307Çóµ÷¼Á +14 ³¬¼¶ÒÁ°º´óÍõ 2026-04-06 14/700 2026-04-08 07:03 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] »úе¹¤³Ì264ѧ˶Çóµ÷¼Á +3 qiushangxian 2026-04-06 3/150 2026-04-08 01:53 by Linzejun
[¿¼ÑÐ] ÉúÎïµ÷¼Á +5 ³È×Ó³È×Ó³È×Ó°¡ 2026-04-05 9/450 2026-04-07 15:31 by Éϰ¶¿ì¿ì
[¿¼ÑÐ] 325 µ÷¼Á +6 QQСϺ 2026-04-07 6/300 2026-04-07 15:17 by Ccclqqq
[¿¼ÑÐ] 287·ÖÇóµ÷¼Á ÓÐרÀû¹ú½±Ò»Ö¾Ô¸¹þ¹¤´ó085406 +6 °×Ò׳½ 2026-04-06 7/350 2026-04-06 22:46 by 875465
[¿¼ÑÐ] 22408 331·ÖÇóµ÷¼Á +4 y__1 2026-04-06 4/200 2026-04-06 17:26 by ÍÁľ˶ʿÕÐÉú
[¿¼ÑÐ] Ò»Ö¾Ô¸Î人Àí¹¤´óѧ080200»úе¹¤³Ì308·Ö£¬Çóµ÷¼Á +4 ÖÕ²»ËÆ´Óǰ 2026-04-05 4/200 2026-04-06 11:46 by ¿¼ÑÐѧУÕеãÈË
[¿¼ÑÐ] 326Çóµ÷¼Á +3 ¹ËÈô¸¡Éú 2026-04-05 3/150 2026-04-05 18:32 by À¶ÔÆË¼Óê
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û