【发布时间】:2015-11-23 23:33:40
【问题描述】:
我有一个问题,我不太确定如何解决它。我想创建一个动画来(流畅地)改变我提取的轮廓的颜色。我假设我所要做的就是使用 while 循环(用于动画),并更改 r、g、b 变量之一的值(使用 for 循环) ,但我不确定如何正确地做到这一点。
提前致谢!
using namespace cv;
using namespace std;
int main()
{
Mat OurImage, img, bin, anim, gray;
string Destination = "rot.jpg";
OurImage = imread(Destination, CV_LOAD_IMAGE_COLOR);
if(! OurImage.data)
{
printf("No image!");
getchar();
return -1;
}
int r = 0, g = 255, b = 255;
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
cvtColor(OurImage,gray,CV_RGB2GRAY);
Canny( gray, img, 100, 200,3);
findContours(img,contours,hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
Mat drawing = Mat::zeros(img.size(),CV_8UC3);
for(int i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(r, g, b);
drawContours(drawing, contours,i,color,2,8,hierarchy, 0,Point());
}
namedWindow("WINDOW", CV_WINDOW_AUTOSIZE);
while(true)
{
不知道这里的 for 循环应该是什么样子
printf(".");
anim = drawing.clone();
r = r+5;
imshow("WINDOW",anim);
if(waitKey(20) == 27)
break;
}
waitKey(0);
}
编辑
我已经设法让它从黄色变为白色(从 0 到 255),但现在我不知道如何让它返回并强制程序这样做,直到我点击。我是否使用标志/如果?另一个?
while(true)
{
for(int i = 0; i < contours.size(); i++)
{
r=r+5;
printf(".");
Scalar color = Scalar(r, g, b);
drawing = drawing.clone();
drawContours(drawing, contours,i,color,2,8,hierarchy, 0,Point());
}
imshow("WINDOW",drawing);
if(waitKey(20) == 27)
break;
}
【问题讨论】:
-
请定义:“改变颜色(流畅地)”
-
从黄色到白色,使用所有黄色阴影(将 r 的值更改 5,从 0 到 255,然后再从 255 到 0)
标签: c++ visual-studio-2010 opencv animation