OpenCV图片动态特效显示(一)--展开显示
学更好的别人,
做更好的自己。
——《微卡智享》
前言
实现效果
代码演示
微卡智享
新建一个项目opencvimgeffect,配置参考《VS2017配置OpenCV通用属性》
向下展开核心代码
for (int i = 1; i < src.rows; ++i) {
tmpsrc = src(Rect(0, 0, src.cols, i));
tmpsrc.copyTo(dst);
imshow("dst", dst);
waitKey(1);
}
向下展开的效果
从左向后展开
//从左向右展开
Mat dst2;
for (int i = 1; i < src.cols; ++i) {
tmpsrc = src(Rect(0, 0, i, src.rows));
tmpsrc.copyTo(dst2);
imshow("dst2", dst2);
waitKey(1);
}
从左向右展开效果
封装函数
//垂直方向显示 direction 0-从上到下 1-从下到上 2-从左向右 3-从右向左
void directionshow(Mat src, int width, int height, int direction) {
Mat tmpsrc, dst;
if (direction == 0) {
for (int i = 1; i < height; ++i) {
tmpsrc = src(Rect(0, 0, width, i));
tmpsrc.copyTo(dst);
imshow("direction0", dst);
waitKey(1);
}
}
else if (direction == 1) {
for (int i = height - 1; i > 0; --i) {
tmpsrc = src(Rect(0, i, width, height - i));
tmpsrc.copyTo(dst);
imshow("direction1", dst);
waitKey(1);
}
}
else if (direction == 2) {
for (int i = 1; i < width; ++i) {
tmpsrc = src(Rect(0, 0, i, height));
tmpsrc.copyTo(dst);
imshow("direction2", dst);
waitKey(1);
}
}
else {
for (int i = width - 1; i > 1; --i) {
tmpsrc = src(Rect(i, 0, width - i, height));
tmpsrc.copyTo(dst);
imshow("direction3", dst);
waitKey(1);
}
}
cout << "over" << direction << endl;
waitKey(0);
}
开头要加入future的引用
完整代码
using namespace cv;
using namespace std;
Mat src, dst, tmpsrc;
void directionshow(Mat, int, int, int);
int main(int argc, char** argv) {
src = imread("E:/DCIM/test3.jpg");
if (!src.data) {
cout << "could not read src" << endl;
return -1;
}
imshow("src", src);
future<void> vertical0 = async(launch::async, directionshow, src, src.cols, src.rows, 0);
future<void> vertical1 = async(launch::async, directionshow, src, src.cols, src.rows, 1);
future<void> vertical2 = async(launch::async, directionshow, src, src.cols, src.rows, 2);
future<void> vertical3 = async(launch::async, directionshow, src, src.cols, src.rows, 3);
//向下展开
//for (int i = 1; i < src.rows; ++i) {
// tmpsrc = src(Rect(0, 0, src.cols, i));
// tmpsrc.copyTo(dst);
// imshow("dst", dst);
// waitKey(1);
//}
//从左向右展开
//Mat dst2;
//for (int i = 1; i < src.cols; ++i) {
// tmpsrc = src(Rect(0, 0, i, src.rows));
// tmpsrc.copyTo(dst2);
// imshow("dst2", dst2);
// waitKey(1);
//}
waitKey(0);
return 0;
}
//垂直方向显示 direction 0-从上到下 1-从下到上 2-从左向右 3-从右向左
void directionshow(Mat src, int width, int height, int direction) {
Mat tmpsrc, dst;
if (direction == 0) {
for (int i = 1; i < height; ++i) {
tmpsrc = src(Rect(0, 0, width, i));
tmpsrc.copyTo(dst);
imshow("direction0", dst);
waitKey(1);
}
}
else if (direction == 1) {
for (int i = height - 1; i > 0; --i) {
tmpsrc = src(Rect(0, i, width, height - i));
tmpsrc.copyTo(dst);
imshow("direction1", dst);
waitKey(1);
}
}
else if (direction == 2) {
for (int i = 1; i < width; ++i) {
tmpsrc = src(Rect(0, 0, i, height));
tmpsrc.copyTo(dst);
imshow("direction2", dst);
waitKey(1);
}
}
else {
for (int i = width - 1; i > 1; --i) {
tmpsrc = src(Rect(i, 0, width - i, height));
tmpsrc.copyTo(dst);
imshow("direction3", dst);
waitKey(1);
}
}
cout << "over" << direction << endl;
waitKey(0);
}
完
扫描二维码
获取更多精彩
微卡智享
「 往期文章 」
本文分享自微信公众号 - 微卡智享(VaccaeShare)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
iOS Transform坐标变化
在使用CGContext时,由于Quartz 2D与UIKit坐标不一致,所以需要对context进行再一次的变化,达到预期的效果。 1. 不同坐标原点介绍 在Quartz 2D中,坐标原点在画布的左下角,而UIKit中,与屏幕坐标一致,以左上角为坐标原点。 如果以(0,0)点为原点绘制F,那么在不同的坐标系就会获得如下的结果。 2. Quartz 2D与UIKit坐标系转化 2.1 UIImage绘制 在iOS的UI开发中,以UIImage为例,绘制一张图片,设置image的frame为(0, 0, 320, 320),会得到上图右的画面。 如果使用如下代码读取Context的transform,可以看到这个transform并不是单位矩阵。 CGRect frame = CGRectMake(0.0, 0.0, 720, 1280); UIGraphicsBeginImageContext(frame.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGAffineTransform contextTrans...
- 下一篇
漫画:什么是 “千年虫” 问题?
在20世纪末,人类社会曾经遭遇过一场空前的大危机,如果这场危机真的降临,甚至有可能终结整个人类文明。 后来,在全世界精英们共同努力之下,这场危机终于得以化解。 这场危机既不是地震,也不是海啸,更不是瘟疫大流行,而是电子计算机带来的“千年虫”问题。 千年虫问题,到底是怎么来的呢? 说到这个问题,就不得不提起一位伟大的程序媛小姐姐,Grace Murray Hopper。 说起这位小姐姐,那可真是厉害了,她是美国海军准将,也是一位计算机科学家。 Grace Murray Hopper都取得过哪些成就呢? 她发明了最早的现代编译器:A-0系统。 她创造了最早的商用编程语言:COBOL。 她在出故障的计算机里发现了一只飞蛾,使得Bug与Debug成为了计算机领域的流行词汇。 在上世纪60年代,计算机的存储资源非常稀缺,程序员在编写每一行代码的时候,都要为存储的使用而精打细算。 为了更好的节约内存空间,Grace Murray Hopper采用了6位数字的组合来存储时间信息。比如1965年7月23日,对应存储形式就是65/07/23,省去了前面的“19”。 这样的存储形式,很快就在计算机领域流传...
相关文章
文章评论
共有0条评论来说两句吧...