| ²é¿´: 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ѧϰ±Ê¼Ç£¨¶þ£©£º²Ù×÷ÿ¸öÏñËØ¡·ÕâÀï¾Í²»ÔÙÖØ¸´ÁË¡£ |
» ²ÂÄãϲ»¶
µçÆø×¨Ë¶320Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
Ò»Ö¾Ô¸Î÷±±¹¤Òµ´óѧ289 085602
ÒѾÓÐ33È˻ظ´
Ò»Ö¾Ô¸¹þ¹¤´ó 085600 277 12²Ä¿Æ»ùÇóµ÷¼Á
ÒѾÓÐ24È˻ظ´
268·Ö085602»¯Ñ§¹¤³Ìµ÷¼Á
ÒѾÓÐ28È˻ظ´
»¯Ñ§¹¤³Ìµ÷¼Á289
ÒѾÓÐ50È˻ظ´
Çóµ÷¼Á£¬262»úеר˶
ÒѾÓÐ8È˻ظ´
305Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
327Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
347Çóµ÷¼Á
ÒѾÓÐ4È˻ظ´
272·Ö²ÄÁÏ×ÓÇóµ÷¼Á
ÒѾÓÐ47È˻ظ´
_tony
ľ³æ (СÓÐÃûÆø)
- Ó¦Öú: 1 (Ó×¶ùÔ°)
- ½ð±Ò: 2193.1
- ºì»¨: 2
- Ìû×Ó: 230
- ÔÚÏß: 154.5Сʱ
- ³æºÅ: 2981977
- ×¢²á: 2014-02-20
- רҵ: ¼ÆËã»úÓ¦Óü¼Êõ
2Â¥2016-01-04 16:28:15
Damons
½ð³æ (ÕýʽдÊÖ)
- Ó¦Öú: 2 (Ó×¶ùÔ°)
- ½ð±Ò: 460.8
- É¢½ð: 938
- ºì»¨: 2
- Ìû×Ó: 395
- ÔÚÏß: 166.7Сʱ
- ³æºÅ: 2277364
- ×¢²á: 2013-02-07
- ÐÔ±ð: GG
- רҵ: »ú¹¹Ñ§Óë»úÆ÷ÈË

3Â¥2016-01-14 00:11:02













»Ø¸´´ËÂ¥