马赫效应和应对方法
[blog]馬赫效應和應對方法
//創建并且分析如何處理矩形的MachEffect ????Mat?srcRect1(500,500,CV_8UC1); ????Mat?srcRect2(500,500,CV_8UC1); ????for?(int?i=0;i<10;i++) ????{ ????????for?(int?j=0;j<50;j++) ????????{ ????????????srcRect1.row(i*50+j)?=?i*25; ????????} ????} ????imshow("MachEffectRect1",srcRect1); 就是macheffect,它的應對方法就是知道數據產生的結構,然后構建連續梯度 for?(int?i=0;i<10;i++) ????{ ????????for?(int?j=0;j<50;j++) ????????{ ????????????srcRect2.row(i*50+j)?=?i*25; ????????} ????} ????for?(int?i=0;i<9;i++) ????{???? ????????for?(int?j=0;j<50;j++) ????????{ ????????????srcRect2.row(25+i*50+j)?=?i*25+j/2; ????????} ????} ?? ????imshow("MachEffectRect2",srcRect2); 這里最為困難的,無疑就是“結構的獲取”,比如對于這種情況 //創建任意情況的MachEffect ????Mat?srcRnd?=?imread("macheffect.bmp"); ????Mat?RncClone?=?srcRnd.clone(); ????Mat?canny; ????blur(RncClone,RncClone,Size(10,10)); ????Mat?srcRnd2?=?Mat::zeros(500,500,CV_8UC1); ????std::vector<std::vector<cv::Point>>contours;???????? ????int?imaxSize?=?-1;int?imaxNum?=?0; ????for?(int?i=0;i<10;i++) ????{??????? ????????dilate(RncClone,RncClone,Mat(10,10,CV_8UC1)); ????????threshold(RncClone,canny,100,255,THRESH_BINARY_INV); ????????Canny(canny,canny,0,255); ????????findContours(canny,contours,CV_RETR_LIST,CV_CHAIN_APPROX_NONE); ????????for?(int?n=0;n<contours.size();n++) ????????{ ????????????int?itmp?=?contours[n].size(); ????????????if?(itmp?>?imaxSize?) ????????????{ ????????????????imaxSize?=?contours[n].size(); ????????????????imaxNum?=?n; ????????????} ????????} ????????drawContours(srcRnd2,contours,imaxNum,Scalar(255-25*i),-1); ????????imaxNum?=?0; ????????imaxSize?=?-1; ????????contours.clear(); ????????imshow("canny",canny); ????????imshow("Rncclone",RncClone); ????????imshow("srcRnd",srcRnd); ????????imshow("srcRnd2",srcRnd2); ????????//srcRnd2?=?Mat::zeros(500,500,CV_8UC1);? ????????waitKey(); ????} ???? ? ? 他還是可以來做的,因為這個結構并不復雜,但是如果對于現實中產生的情況,其結構的獲取會比較復雜。但是總的來說,獲取結構,構建連續梯度替代直接的跳躍應該是問題的解決方法。總結
- 上一篇: 从 API、UI、结构到商业产品设计精髓
- 下一篇: 《重说中国近代史》