我有一个点设置到位置(x,y)和此点的两个角度。我在示例中画了两行用于演示,它应该如何显示。
现在我想要的是将亮度改为这些线以外的所有像素。
这是原始图片。
这是一个例子,我想要的。
如果我拥有并知道输入图像,点和两个角度,如何使用Opencv(C ++)轻松更改像素?我知道很多解决方案,但我想要最简单的解决方案,如何检测哪些像素需要改变,哪些不需要改变。
答案 0 :(得分:2)
一种方法是:
答案 1 :(得分:1)
我从@Zindarod steps编写代码。希望能帮助别人。 角度处于下降状态。
void view(cv::Mat& frame, double angle_left, double angle_right, cv::Point center){
int length = 1500;
cv::Point left_view;
left_view.x = (int)round(center.x + length * cos((angle_left * (CV_PI / 180))));
left_view.y = (int)round(center.y + length * sin((angle_left * (CV_PI / 180))));
cv::Point right_view;
right_view.x = (int)round(center.x + length * cos((angle_right * (CV_PI / 180))));
right_view.y = (int)round(center.y + length * sin((angle_right * (CV_PI / 180))));
cv::Point pts[4] = { position_of_eyes, left_view, right_view, position_of_eyes };
Mat mask = Mat(frame.size(), CV_32FC3, cv::Scalar(1.0, 1.0, 0.3));
cv::fillConvexPoly(mask, pts, 3, cv::Scalar(1.0,1.0,1.0));
cv::cvtColor(frame, frame, CV_BGR2HSV);
frame.convertTo(frame, CV_32FC3);
cv::multiply(frame, mask, frame);
frame.convertTo(frame, CV_8UC3);
cv::cvtColor(frame, frame, CV_HSV2BGR);
}
答案 2 :(得分:0)
给定原点和两个角度,你可以为你的两条线计算2个单位向量,让它们为unitA和unitB。
对于图像的每个像素,请执行以下步骤:
1.从原点到像素获得一个向量(称为vec)。
2.找到vec和参考矢量(refVec)之间的角度(ang)。
3.如果ang大于refVec和unitA之间的角度,但小于refVec和unitB之间的角度,则重新着色像素。