原文地址:http://www.cnblogs.com/magiccaptain/archive/2013/05/21/3091035.html

两个效果:放大和挤压,分别由MaxFrame和MinFrame函数实现, 可直接使用在摄像头中:

void MaxFrame(IplImage* frame)
{uchar* old_data = (uchar*)frame->imageData;uchar* new_data = new uchar[frame->widthStep * frame->height];int center_X = frame->width / 2;int center_Y = frame->height / 2;int radius = 400;int newX = 0;int newY = 0;int real_radius = (int)(radius / 2.0);for (int i = 0; i < frame->width; i++){for (int j = 0; j < frame->height; j++){int tX = i - center_X;int tY = j - center_Y;int distance = (int)(tX * tX + tY * tY);if (distance < radius * radius){newX = (int)((float)(tX) / 2.0);newY = (int)((float)(tY) / 2.0);newX = (int) (newX * (sqrt((double)distance) / real_radius));newX = (int) (newX * (sqrt((double)distance) / real_radius));newX = newX + center_X;newY = newY + center_Y;new_data[frame->widthStep * j + i * 3] = old_data[frame->widthStep * newY + newX * 3];new_data[frame->widthStep * j + i * 3 + 1] =old_data[frame->widthStep * newY + newX * 3 + 1];new_data[frame->widthStep * j + i * 3 + 2] =old_data[frame->widthStep * newY + newX * 3 + 2];}else{new_data[frame->widthStep * j + i * 3] =  old_data[frame->widthStep * j + i * 3];new_data[frame->widthStep * j + i * 3 + 1] =  old_data[frame->widthStep * j + i * 3 + 1];new_data[frame->widthStep * j + i * 3 + 2] =  old_data[frame->widthStep * j + i * 3 + 2];}}}memcpy(old_data, new_data, sizeof(uchar) * frame->widthStep * frame->height);delete new_data;
}
void MinFrame(IplImage* frame)
{uchar* old_data = (uchar*)frame->imageData;uchar* new_data = new uchar[frame->widthStep * frame->height];int center_X = frame->width / 2;int center_Y = frame->height / 2;int radius = 0;double theta = 0;int newX = 0;int newY = 0;for (int i = 0; i < frame->width; i++){for (int j = 0; j < frame->height; j++){int tX = i - center_X;int tY = j - center_Y;theta = atan2((double)tY, (double)tX);radius = (int)sqrt((double)(tX * tX) + (double) (tY * tY));int newR = (int)(sqrt((double)radius) * 12);newX = center_X + (int)(newR * cos(theta));newY = center_Y + (int)(newR * sin(theta));if (!(newX > 0 && newX < frame->width)){newX = 0;}if (!(newY > 0 && newY < frame->height)){newY = 0;}new_data[frame->widthStep * j + i * 3] = old_data[frame->widthStep * newY + newX * 3];new_data[frame->widthStep * j + i * 3 + 1] =old_data[frame->widthStep * newY + newX * 3 + 1];new_data[frame->widthStep * j + i * 3 + 2] =old_data[frame->widthStep * newY + newX * 3 + 2];}}memcpy(old_data, new_data, sizeof(uchar) * frame->widthStep * frame->height);delete new_data;
}

OpenCV 图像处理 哈哈镜效果相关推荐

  1. 使用OpenCV实现哈哈镜效果

    使用OpenCV实现哈哈镜效果 导入工具包 import cv2 import numpy as np import math from vcam import vcam,meshGen #导入pyt ...

  2. OpenCV 实现哈哈镜效果

    代码,有参考别人的代码 // haha_mirror.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostrea ...

  3. 免费送书啦!《 OpenCV图像处理入门与实践》一本全搞定

    OpenCV 的基础图像操作都只是针对图像中的像素点,并不是直接对图像整体进行的操作.而很多时候并不能仅通过改变像素点来进行图像的操作,为此我们需要学习关于图像的算术操作. 1.图像加法 对于两张相同 ...

  4. opencv图像处理总结

    opencv图像处理基本操作 1. 矩阵数据类型 通用矩阵数据类型: CV_<bit_depth>(S|U|F)C<number_of_channels> 其中,S表示带符号整 ...

  5. OpenCV图像处理(Python)学习笔记

    OpenCV图像处理 OpenCV图像处理 第1章 OpenCV入门 第2章 图像处理基础 2.1 基本表示方法 2.2 感兴趣区域(ROI) 第3章 图像运算 3.1 加法运算 3.2 图像加权和 ...

  6. Python+Opencv图像处理新手入门教程(三):阈值与二值化

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...

  7. OpenCV图像处理(18)——文件夹下所有图像转灰度(14-15综合)

    对文件夹下所有图像做灰度转换,并做garma校正,产生不同的灰度亮度范围,方案用(13-14) #pragma once #include<stdio.h> #include<ope ...

  8. OpenCV图像处理(14)—— 图像转视频

    引言 有个项目,需要将osg生成的批量图像转成视频:特点是,图像自带编号,类似于: Ir_Scene_339.jpg 的格式. 操作中,使用OpenCV自带的video函数完成. void Image ...

  9. OpenCV图像处理(13)——指定区域截取和指定区域复制

    前言: 在令人讨厌的的自动屏保中突然看到一张漂亮的图片(懂就行!),就想赶紧按了键盘上的截屏键,当发现无法去掉上面的文字. 于是乎,图像处理的我就和邱邱一起研究如何将其去掉. 思路: 该图片上的文字和 ...

最新文章

  1. 给网站管理员的建议:创建可利用的、可抓取的网站
  2. pandas使用Categorical函数将object数据数据列转化为categorical数据列并基于categorical的因子(分类)水平排序dataframe
  3. C语言中函数参数传递
  4. opencv获取摄像头帧率分辨率
  5. 【机器学习】创建自己的电影推荐系统
  6. React Native基础入门教程:初步使用Flexbox布局
  7. 重构,重构,重构--代码,程序,包括思想
  8. 机器学习之朴素贝叶斯法
  9. 设计趋势|平面设计的热点是什么?
  10. 计算机在矿山企业中的应用,计算机在矿山工业中的应用与发展
  11. 解决编译错误: 非法字符: '\ufeff' 解决方案|错误: 需要class, interface或enum
  12. 薪资不如 Java、C,BAT 需求大,揭秘 Python 程序员跳槽现状!
  13. 打败 Python、JS、C# 成最受欢迎编程语言,是时候掌握 Rust 了吗?
  14. 04-1下载Win系统(装机助理)
  15. 最近心血来潮,准备更新博客
  16. Linux驱动——LED驱动的编写与实验
  17. 最新在html中实现音乐或视频自动播放
  18. 动态canvas 相册简单效果展示
  19. C语言 | 改变指针变量的值
  20. python的关系运算符可以连续使用_在Python中,关系运算符可以连续使用,例如15等价于13and35....

热门文章

  1. C语言程序设计之考卷成绩分析软件程序设计
  2. 编程(从入门到入土)8
  3. asp.net mysql连接字符串_【转】ASP.NET数据库连接字符串总结
  4. STM32学习笔记---GPIO
  5. nextcloud批量预先生成缩略图 - 使用Preview Generator插件
  6. 函数LoadT8()报错“Unknown DIB file format”
  7. php转行室内设计,干货贴!15个玩转室内设计的app
  8. 【更新】Aspose.Cells 10月新版V17.10发布 | 支持读写外部XLSB文件
  9. 机器学习入门:第十五章 递归神经网络
  10. AD20原理图转pcb失败