任务描述:识别方向(19任务三加强版)

    1. #include <iostream>
    2. #include <opencv2/opencv.hpp>
    3. #include <opencv2/imgproc/imgproc.hpp>
    4. #include <opencv2/highgui/highgui.hpp>
    5. using namespace std;
    6. using namespace cv;
    7. int main()
    8. {
    9. Mat srcImage,dstImage1,dstImage2,dstImage3,dstImage4;
    10. srcImage=imread(/home/ma/下载/pictures/1.jpg);
    11. Mat zero= Mat::zeros(srcImage.size(),srcImage.type());
    12. cvtColor(srcImage,dstImage1,COLOR_BGR2GRAY);
    13. threshold(dstImage1,dstImage1,80,255,THRESH_BINARY);
    14. Canny(dstImage1,dstImage2,3,9,3);
    15. namedWindow(src,0);
    16. imshow(src,srcImage);
    17. vector<Vec4i>lines;
    18. HoughLinesP(dstImage2,lines,1,CV_PI/180,80,50,10);
    19. namedWindow(dst4,0);
    20. imshow(dst4,dstImage2);
    21. for(uint i=0;i<lines.size();i++)
    22. {
    23. Vec4i vec1=lines[i];
    24. Point pt1=Point (vec1[0],vec1[1]);
    25. Point pt2=Point (vec1[2],vec1[3]);
    26. if(lines[i][0]<srcImage.cols*0.75&&lines[i][0]>srcImage.cols*0.2&&lines[i][1]<srcImage.rows*0.85&&lines[i][1]>srcImage.rows*0.25){
    27. line(zero,pt1,pt2,Scalar(0,0,255),3);
    28. double y=(double)lines[i][1]-lines[i][3];
    29. double x=(double)lines[i+1][0]-lines[i+1][2];
    30. double k1=(double)(lines[i][1]-lines[i][3])/(double)(lines[i][0]-lines[i][2]);
    31. double k2=(double)(lines[i+1][1]-lines[i+1][3])/(double)(lines[i+1][0]-lines[i+1][2]);
    32. if(0<y&&y<1436){
    33. if(-1785<x&&x<-2){
    34. if(-60<k1&&k1<12){
    35. if(-60<k2&&k2<12){
    36. if(lines.size()>24&&lines.size()<42){
    37. cout<<cross<<endl;
    38. }
    39. }
    40. }
    41. }
    42. }
    43. if(-1150<y&&y<1664){
    44. if(-3676<x&&x<0){
    45. if(-64<k1&&k1<61){
    46. if(-56.1<k2&&k2<56.8){
    47. if(lines.size()>40&&lines.size()<50){
    48. cout<<straight<<endl;
    49. }
    50. }
    51. }
    52. }
    53. }
    54. if(370<y&&y<1750){
    55. if(-3830<x&&x<-140){
    56. if(-8.5<k1&&k1<-2.5){
    57. if(-8.5<k2&&k2<0){
    58. if(lines.size()>10&&lines.size()<18){
    59. cout<<straight<<endl;
    60. }
    61. }
    62. }
    63. }
    64. }
    65. if(-1590<y&&y<370){
    66. if(-2470<x&&x<-50){
    67. if(7<k1&&k1<7.2){
    68. if(-0.33<k2&&k2<8.2){
    69. if(lines.size()>20&&lines.size()<34){
    70. cout<<left<<endl;
    71. }
    72. }
    73. }
    74. }
    75. }
    76. if(-472<y&&y<-281){
    77. if(-1990<x&&x<-1.1){
    78. if(0.28<k1&&k1<0.32){
    79. if(0.31<k2&&k2<0.57){
    80. if(lines.size()>19&&lines.size()<25){
    81. cout<<left<<endl;
    82. }
    83. }
    84. }
    85. }
    86. }
    87. if(-2128<y&&y<0){
    88. if(-2111<x&&x<509){
    89. if(0.23<k1&&k1<0.36){
    90. if(0.22<k2&&k2<0.32){
    91. if(lines.size()>19&&lines.size()<25){
    92. cout<<left<<endl;
    93. }
    94. }
    95. }
    96. }
    97. }
    98. if(-1360<y&&y<124){
    99. if(-2360<x&&x<-6){
    100. if(4<k1&&k1<4.8){
    101. if(4<k2&&k2<4.8){
    102. if(lines.size()>15&&lines.size()<34){
    103. cout<<right<<endl;
    104. }
    105. }
    106. }
    107. }
    108. }
    109. // cout<<x=<<x<<endl;
    110. // cout<<y=<<y<<endl;
    111. // cout<<k1=<<k1<<endl;
    112. // cout<<k2=<<k2<<endl;
    113. // cout<<lines.size()<<endl;
    114. }
    115. }
    116. namedWindow(dst1,0);
    117. imshow(dst1,zero);
    118. waitKey(0);
    119. return 0;
    120. }