opencvで使い方がいまいちわからなかったのでメモ。
//Cインターフェイス版 線分ラスタスキャン
IplImage image = img;
CvLineIterator it;
while((ret = fscanf(fp, "%d %d %d %d", &p1.x, &p1.y, &p2.x, &p2.y)) != EOF){
cv::line(img, p1, p2, color, 1, 8, 0);
ct = cvInitLineIterator(&image, cvPoint(p1.x, p1.y), cvPoint(p2.x, p2.y), &it, 8, 0);
for(int i = 0; i < ct; i++){
offset = it.ptr - (uchar*)(image.imageData);
pt.y = offset/image.widthStep;
pt.x = (offset - pt.y * image.widthStep) / (3 * sizeof(uchar));
cout << pt.x << ", " << pt.y << endl;
CV_NEXT_LINE_POINT(it);
}
}
//C++インターフェイス版 線分ラスタスキャン
while((ret = fscanf(fp2, "%d %d %d %d", &p1.x, &p1.y, &p2.x, &p2.y)) != EOF){
cv::line(img2, p1, p2, color, 1, 8, 0);
//p1とp2が成す線分をラスタスキャン
cv::LineIterator it(img2, p1, p2, 8);
//線分の各ピクセルにアクセス?
for(int i = 0; i < it.count; i++, ++it){
offset = it.ptr - (uchar*)(img2.data);
//y = offset / img2.step;
//x = (offset - y * img2.step) / (3 * sizeof(uchar));
//cout << x << ", " << y << endl;
pt.y = offset / img2.step;
pt.x = (offset - pt.y * img2.step) / (3 * sizeof(uchar));
//std::cout << pt.x << ", " << pt.y << std::endl;
//エピポーラ線計算
cv::Mat x = (Mat_(3, 1) << pt.x, pt.y, 1);
emat = f * x;
//std::cout << "line ->" << std::endl << emat << std::endl;
}
}
//Cインターフェイス版 線分ラスタスキャン
IplImage image = img;
CvLineIterator it;
while((ret = fscanf(fp, "%d %d %d %d", &p1.x, &p1.y, &p2.x, &p2.y)) != EOF){
cv::line(img, p1, p2, color, 1, 8, 0);
ct = cvInitLineIterator(&image, cvPoint(p1.x, p1.y), cvPoint(p2.x, p2.y), &it, 8, 0);
for(int i = 0; i < ct; i++){
offset = it.ptr - (uchar*)(image.imageData);
pt.y = offset/image.widthStep;
pt.x = (offset - pt.y * image.widthStep) / (3 * sizeof(uchar));
cout << pt.x << ", " << pt.y << endl;
CV_NEXT_LINE_POINT(it);
}
}
//C++インターフェイス版 線分ラスタスキャン
while((ret = fscanf(fp2, "%d %d %d %d", &p1.x, &p1.y, &p2.x, &p2.y)) != EOF){
cv::line(img2, p1, p2, color, 1, 8, 0);
//p1とp2が成す線分をラスタスキャン
cv::LineIterator it(img2, p1, p2, 8);
//線分の各ピクセルにアクセス?
for(int i = 0; i < it.count; i++, ++it){
offset = it.ptr - (uchar*)(img2.data);
//y = offset / img2.step;
//x = (offset - y * img2.step) / (3 * sizeof(uchar));
//cout << x << ", " << y << endl;
pt.y = offset / img2.step;
pt.x = (offset - pt.y * img2.step) / (3 * sizeof(uchar));
//std::cout << pt.x << ", " << pt.y << std::endl;
//エピポーラ線計算
cv::Mat x = (Mat_
emat = f * x;
//std::cout << "line ->" << std::endl << emat << std::endl;
}
}