아래 이미지의 빨간 라인의 픽셀의 값들을 알아 보고자 하자.
출발 포인트를 (200, 100), 도착 포인트를 (250, 180) 이라 할 때
방법 1) 마스크 이미지를 이용
cv::Mat image = cv::imread("image"); cv::Point A(200,100); cv::Point B(250,180); // 바탕이 검정이 마스크 이미지를 생성 // 또는 cv::Mat mask(image.size(), uchar(0), CV_8UC1); cv::Mat1b mask(image.size(), uchar(0)); // 출발점과 끝점을 잇는 하얀선을 그림 cv::line(mask, A, B, cv::Scalar(255)); std::vector<cv::Point> points1; cv::findNonZero(mask, points1); for(cv::Point& pt : points1) { cv::Vec3b pixel = image.at < cv::Vec3b> (pt.y, pt.x); } |
방법 2) LineIterator 를 이용
cv::LineIterator lit(image, A, B); std::vector<cv::Point> points1; for (int i = 0; i < lit.count; ++i, ++lit) { points1.push_back(lit.pos()); } for(cv::Point& pt : points1) { cv::Vec3b pixel = image.at < cv::Vec3b> (pt.y, pt.x); } |
'opencv' 카테고리의 다른 글
C# 와 C++/CLI Dll 사이의 이미지 전달 (0) | 2025.02.10 |
---|---|
(opencv) pixel access time (1) | 2025.02.08 |
contour / labelling (0) | 2023.12.07 |
공백 메우기 (2) | 2023.12.02 |
b/w 이미지의 칼럼(수직방향)별 검정(=0)픽셀수 카운트 (0) | 2023.12.02 |