당신은 compare를 사용할 수 무효 비교 (InputArray의 SRC1, InputArray의 SRC2, OutputArray DST, INT cmpop)
의 핵심 아이디어는 같은 크기의 매트에 기준을 인코딩하는 것입니다 그것을 사용하여 소스 이미지와 비교하십시오. 다음은 그 예입니다.
하자 당신의 기준은 포물선 곡선이라고 말할 :
x는 이미지 행 (0-512) 인 y는 일반 그레이 스케일 (255)되도록
. 사용이 그림에 기준을 적용하는 비교보다
:이 기준을 감안할 때 회색 이미지를 그릴 수
내가이 예에서 포물선을 사용, 물론 자신의 기준과 필요에 맞게 모델을 수정해야합니다.
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/photo.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat src = imread("Lenna.png", CV_LOAD_IMAGE_GRAYSCALE);
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", src);
Mat someGradientMat(src.size(), CV_8U, Scalar(0));
int limit = src.size().height;
double a = -255.0*4.0/(limit*limit);
double b = 255.0*4.0/limit;
double c = 0;
for (int r = 0; r < limit; r++) {
//value is the parabole y = ax^2 + b + c
int value = (int)(a*r*r + b*r + c);
someGradientMat.row(r).setTo(value);
}
namedWindow("someGradientMat", CV_WINDOW_NORMAL);
imshow("someGradientMat", someGradientMat);
Mat dst;
compare(src, someGradientMat, dst, CMP_LT);
namedWindow("dst", CV_WINDOW_NORMAL);
imshow("dst", dst);
waitKey(0);
return 0;
}
이 방법은 매우 고밀도의 흑백 이미지에서 작동 할 수 있지만 권장하지 않습니다. 옵티컬 플로우는 흑백 이미지에 크게 위배되는 밝기 불변성을 가정 한 상태에서 작동합니다. 이제는 두 프레임에서 변하지 않는 충분한 * 흑백 픽셀이 있으면 작동 할 수 있지만 알고리즘을 자체 가정을 위반하는 방식으로 적용한다는 점에 유의하십시오. –
하지만 그 방법은 '매트'를 만드는 방법입니다. –
@AlexanderReynolds 답변 해 주셔서 다시 한 번 감사드립니다. 바이너리 이미지와 옵티컬 플로우에 대해 나는 몰랐다. 나는'calcOpticalFlowPyrLK'를 호출 한 결과로 얻을 수있는 점 집합을 처리하기 위해 그 사람의 비디오를 기반으로 준 집적 광학 흐름 연산을 수행 할 수 있다는 희망에 착수했습니다. – JDBones