OpenCV 는 이미지 의 선 궤적 을 식별 합 니 다.

그림 에 선,도형 이 있 으 면 사람의 눈 이 직접 알 아 볼 수 있 는데 이것 은 사람의 직접적인 반응 이다.그렇다면 어떻게 컴퓨터 를 식별 하 게 합 니까?
그림 은 메모리 에 2 차원 행렬 로 저장 되 어 있 으 며,컬러 그림 이 라면 GBR 3 채널 이 고,그 레이스 케 일 은 단일 채널 이다.이 강 좌 는 OpenCV 로 도형 의 선,곡선 등 궤적 을 식별한다.
소프트웨어 환경:Win7-32,VS 2010,OpenCV 2.4.9
(1)그 레이스 케 일 로 그림 가 져 오기

Mat src = imread("1.jpg", 0);
(2)제 생각:도형 중의 모든 픽 셀 점 의 차이 에 따라 판단 하고 원 그림 의 그 레이스 케 일 그림 을 이치 화 처리 합 니 다.선의 구역 픽 셀 이 0 이 아니 라 라인 이 있 는 구역 을 255 로 설정 한 다음 에 한 열 씩 픽 셀 구 화 를 합 니 다.만약 에 열 이 0 보다 크 면 라인 이 검 측 된 것 입 니 다.이때 이 열의 스 캔 을 끝내 고 다음 열 을 계속 스 캔 합 니 다.이렇게 하면 선의 궤적 을 얻 을 수 있다.
2 값 처리:

threshold(src, dst, 100, 255, CV_THRESH_BINARY_INV); //   
열 별로 스 캔 하기:

//    ,    ,         ,     ,       0;          0
 for(int w = 0; w < nCols; w++)
 {
 int sum = 0;
 
 for(int h = 0; h < nRows; h++)
 {
  uchar *pRow = dst.ptr<uchar>(h, w); //          
  sum += (int)(*pRow);
 
  if(sum > 0) //        ,     0
  {
  cout << "      ,";  //     ,      ,        。
  cout << "    : X = " << w << ", Y = " << h << endl; 
  fout << "    : X = " << w << ", Y = " << h << endl; //        ,        
  sum = 0;
  break;
  }
 }
 }
전체 코드 는 다음 과 같 습 니 다.

#include <iostream>
#include <opencv2/opencv.hpp>
#include <fstream>
using namespace std;
using namespace cv;
 
int main()
{
 Mat src = imread("1.jpg", 0);
 //imshow("src", src);
 
 Mat dst;
 threshold(src, dst, 100, 255, CV_THRESH_BINARY_INV); //   
 //imshow("dst", dst);
 
 int nRows = dst.rows;
 int nCols = dst.cols;
 
 ofstream fout("data.txt");
 
 //    ,    ,         ,     ,       0;          0
 for(int w = 0; w < nCols; w++)
 {
 int sum = 0;
 
 for(int h = 0; h < nRows; h++)
 {
  uchar *pRow = dst.ptr<uchar>(h, w); //          
  sum += (int)(*pRow);
 
  if(sum > 0) //        ,     0
  {
  cout << "      ,";  //     ,      ,        。
  cout << "    : X = " << w << ", Y = " << h << endl; 
  fout << "    : X = " << w << ", Y = " << h << endl; //        ,        
  sum = 0;
  break;
  }
 }
 }
 
 waitKey();
 cout << endl;
 system("pause");
 return 0;
}
Qt 에서 시 뮬 레이 션 을 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.

현재 의 식별 은 위 에서 보 듯 이 추 후 계속 업 데 이 트 될 것 입 니 다.좋 은 처리 방법 이 있 으 면 여러분 의 블 로 거 들 이 고 쳐 주 십시오.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기