当前位置: 首页 > news >正文

泉州网站建设网站建设游戏开发软件有哪些

泉州网站建设网站建设,游戏开发软件有哪些,网站建设的想法和意见,布朗新风 中企动力提供网站建设调节图片对比度和亮度#xff08;像素变换#xff09; 原理像素变换亮度和对比度调整 代码实现更简便的方法结果展示 γ \gamma γ校正及其实操案例线性变换的缺点 γ \gamma γ校正低曝光图片矫正案例代码实现 原理 关于OpenCV的配置和基础用法#xff0c;请参阅本专栏的其… 调节图片对比度和亮度像素变换 原理像素变换亮度和对比度调整 代码实现更简便的方法结果展示 γ \gamma γ校正及其实操案例线性变换的缺点 γ \gamma γ校正低曝光图片矫正案例代码实现 原理 关于OpenCV的配置和基础用法请参阅本专栏的其他文章垚武田的OpenCV合集 以下的原理来自Richard Szeliski的书《Computer Vision: Algorithms and Applications》《计算机视觉算法和应用》。 像素变换 图片处理的操作基本上就是一个传入一张或多张图片然后输出一张结果图片的方法。 对某个图片对象进行的操作可以分为以下两大类 点操作像素变换域操作涉及到相邻的像素 这章主要讨论像素变换。在像素变换中每个像素的计算结果只与输入的像素和其他参数有关不与图片中的其他像素相关。像素变换的应用包括图片亮度、对比度调整以及颜色校正和颜色变换等。 亮度和对比度调整 在亮度和对比度的线性调整中像素变换的算法非常简单就是一个简单的线性变换 g ( x ) α f ( x ) β g(x) \alpha f(x) \beta g(x)αf(x)β α 0 \alpha 0 α0为增强参数 β \beta β为偏移参数 α \alpha α控制对比度 β \beta β用来控制亮度 f ( x ) f(x) f(x)为转换前的像素 g ( x ) g(x) g(x)为转换后的像素 也可以用行列坐标的形式来表示像素 g ( i , j ) α f ( i , j ) β g(i, j) \alpha f(i ,j) \beta g(i,j)αf(i,j)β i i i和 j j j分别代表行号和列号 代码实现 首先导入图片并储存到Mat对象中。 //CommandLineParser对main函数输入的参数进行解析最后的字符串代表以下意义 //input表示一个有顺序的参数将其命名为input //lena.jpg代表input的默认值 //input image是对input参数的解释说明它是输入的图像 CommandLineParser parser(argc, argv, {input | lena.jpg | input image}); Mat image{ imread(parser.getString(input)) }; //获取参数解析中的input参数 if (image.empty()) {//如果打开失败则输出错误信息并退出程序cout 无法打开图片\n endl;cout 输入图片 argv[0] 参数错误 endl;return -1; }接着创建一个新的Mat对象来储存变换后的结果。这个新对象的所有值初始化为0而且具有和原图像同样的大小和类型 Mat new_image{ Mat::zeros(image.size(), image.type()) };Mat对象的创建方法可以参阅专栏中的《【OpenCV C20 学习笔记】基本图像容器——Mat》 然后声明 α \alpha α和 β \beta β这两个参数并让用户能够通过控制台输入它们的值 double alpha{ 1.0 }; //对比度控制参数 int beta{ 0 }; //亮度控制参数cout 基础线性变换 endl; cout ----------- endl; cout * 输入alpha值 [1.0-3.0]; cin alpha; cout * 输入beta值 [0-100]; cin beta;现在用一个嵌套的for循环语句遍历原图片中的每一个像素并对每一个像素都进行变换操作 for (int y{ 0 }; y image.rows; y) { //遍历行for (int x{ 0 }; x image.cols; x) { //遍历列for (int c{ 0 }; c image.channels(); c) { //遍历颜色通道new_image.atVec3b(y, x)[c] saturate_castuchar(alpha * image.atVec3b(y, x)[c] beta);}} }因为前面读取图片的时候我们使用的是默认的BGR3通道格式。所以对于矩阵中的每一个数据项我们用Vec3b数据类型来接收并用下标c对3个通道中的每个通道值进行访问最终每个数值的访问都使用了y行数、x列数、c通道数因为线性变换的计算可能使得结果超出原有类型的值域或者变成其他类型比如当alpha为浮点数时计算结果就会自动转换成浮点数。所以必须使用saturate_cast对最终结果进行类型转换。 最后创建窗口分别展示原始图片和变换后的图片 imshow(原始图片, image); imshow(新图片, new_image);waitKey(0);更简便的方法 除了使用for循环对矩阵中的所有值进行遍历和转换之外还可以使用更加便利的转换方法 image.convertTo(new_image, -1, alpha, beta);正如我在《【OpenCV C20 学习笔记】操作图片》一文中详细描述的那样convertTo函数实际上就是在执行一个线性变化的操作。其函数原型如下 void cv::Mat::convertTo(OutputArray m, int rtype, double alpha 1, double beta 0) const 其算法如下 m ( x , y ) s a t u r a t e _ c a s t r T y p e ( α ( ∗ t h i s ) ( x , y ) β ) m(x,y) saturate\_cast rType(\alpha(*this)(x, y)\beta) m(x,y)saturate_castrType(α(∗this)(x,y)β) 实质上就等于线性变化类型转换的操作即上一节代码中for循环体内的操作。所以上一节代码中的整个for循环可以用convertTo函数代替。 上一节的代码只是为了展示像素变换的原理在实际应用中还是建议使用convertTo()函数直接进行变换。 结果展示 使用2.2的 α \alpha α值和50的 β \beta β值 结果如下 γ \gamma γ校正及其实操案例 在这个案例中将运用另外一种亮度调整方法—— γ \gamma γ校正来修复一张低曝光的照片。 线性变换的缺点 在上述线性变换的例子中亮度的调整是通过给每个像素值加上或减去一个常量即偏移参数 β \beta β。如果调整后的结果超出了值域则会用saturate_cast进行类型转换使其仍然落在值域之中。 saturate_cast的具体原理请参阅本专栏中的《【OpenCV C20学习笔记】矩阵上的掩码(mask)操作》中的“类型转换”小节 下面的直方图展示了偏移参数为80时像素分布的改变 灰色部分为图像的原始像素分布黑色部分为调整后的像素分布横坐标为每个颜色值纵坐标为每个颜色值对应的像素个数 可以看到颜色值整体往右偏移了而且最大值和最小值上的像素个数显著增加这是值域调整的结果。 另一方面对比度的调整在上例中是通过改变 α \alpha α值实现的。 α \alpha α越大对比度越高反之对比度越低。下面的直方图展示了当 α \alpha α值小于1的时候像素分布的改变如下 图例与上图相同 与上图对比这里的黑色部分像被横向挤压了颜色值的值域变窄了像素分布也更加集中了。 通过这两张图我们也可以看到线性变换的一些缺点 由于saturate_cast的值域控制会丢失一些图片的信息即原始值域会被截断导致变换后的颜色值值域变窄亮度的调整同时会影响图片的对比度如第一张图中所示 β \beta β参数在偏移像素分布的同时也使像素更加集中变换后颜色值最大值和最小值处的像素分布会激增会导致图片过曝 γ \gamma γ校正 γ \gamma γ校正使用非线性变换来调整图片的亮度其原理如下 O ( I 255 ) γ × 255 O (\frac{I}{255})^\gamma \times 255 O(255I​)γ×255 I I I为像素的原值颜色值 O O O为像素变换后的颜色值 γ \gamma γ为变换系数 变换结果 O O O和原始值 I I I之间由于是非线性的关系所以并不是每个像素的变换效果都是一样的。下图显示在不同的 γ \gamma γ值下 O O O 和 I I I之间的关系 横坐标为原始值I纵坐标为变换值O 可以看到当 γ 1 \gamma1 γ1的时候原始的最小值即I0的增加更多反之当 γ 1 \gamma1 γ1时原始的最小值增加更少。 低曝光图片矫正案例 下面两张图左边是原图右边是用线性变换矫正后的图片 α 1.3 \alpha1.3 α1.3 β 40 \beta40 β40 图片的整体亮度被调高了但是很明显天空的细节也丢失了显得有点过曝。这就是上面所说的saturate_cast值域控制的结果。 下面是 γ \gamma γ校正 γ 0.4 \gamma0.4 γ0.4的结果 效果高下立判 原图、线性变换和 γ \gamma γ校正的像素分布直方图如下 左图线性变换后中图原始图片右图 γ \gamma γ校正后3幅图的y轴并不一致 可以看到在原图中左边的像素偏多也就是颜色值低暗部的像素偏多。在线性矫正之后即左图中可以看到最右边有个到顶的颜色值这就是值域控制后的最大颜色值的像素分布saturate_cast将所有超出最大值的变换结果都变成了最大值。但是在 γ \gamma γ校正之后即右图中可以看到相对于原图往右偏移了同时暗部和亮部也发生了分布的改变。但是显然暗部的变化更多数量减少且更分散亮部的变化偏少。这就防止了图片的过曝。下图标注了对比的结果 所以可以得出以下结论 相对于线性变换 γ \gamma γ校正在调整图片亮度上效果更好也更能保留原始图片的细节 代码实现 在OpenCV中可以用LUT函数实现 γ \gamma γ校正。 其逻辑就是用非线性算法计算出所有颜色值变换后的值储存到一个查询表中然后用查询表的值一一替换原始图片中对应的颜色值。 double gamma_{ 0.4 }; //确定gamma值 Mat lookUpTable(1, 256, CV_8U); //新建查询表 uchar* p lookUpTable.ptr(); //获取查询表的指针方便后面填充值 for (int i{ 0 }; i 256; i) //填充查询表p[i] saturate_castuchar(pow(i / 255.0, gamma_) * 255.0); //非线性转换算法Mat res image.clone(); //复制原始图片对象作为储存变换结果的对象 LUT(image, lookUpTable, res); //按查询表中的值替换原始图片中的值使用查询表能够提高替换原图中所有颜色值的速度。 查询表原理及LUT函数的用法可以参阅本专栏中的【OpenCV C20 学习笔记】扫描图片数据一文。
http://www.pierceye.com/news/60325/

相关文章:

  • 政务网站建设规划深圳网络推广网站推广
  • wap网站开发框架Wordpress可视化导航
  • 网站建设管理员工工资多少有没有专门做印刷图的网站
  • 快速搭建展示型网站淄博亿泰
  • 企业网站设计概念华大网站建设
  • 网站设计费用志wordpress 搜索框
  • 社交网站开发公司买个小程序多少钱
  • 四川建设网电子招投标网站注册网站要多少钱
  • 做淘宝图片的网站百度竞价推广运营
  • 简单的购物网站源码东莞排名seo网站关键词优化
  • 包头企业网站制作三水 网站建设
  • 宿迁做网站的哈尔滨视频制作公司
  • 网站空间上传工具峨山网站建设
  • 互动的网站建设网站标题的关键字怎么写
  • 上海市建设安全协会成绩查询的网站企业官网怎么和别的网站做链接
  • 企业网站建设费手机编程软件哪个好用
  • 金华企业网站建设公司备案的网站 能拿来做仿站吗
  • 乔拓云建站有免费的吗哪个网站有做彩平的材质贴图
  • 网站建设jnlongji网站开发公司交易流程
  • 做网站负责人有法律风险吗找公司做网站运营怎么样
  • 吴江专业的网站建设网站 后台 开发
  • 做图片祝福的网站上海企业网站建设制
  • 中兴路由器做网站电子商务网站建设基本流程
  • 设计网站架构中英文网站建设 pdf
  • 深圳建设高端网站怎么查自己的二建信息
  • 网站制作公司大型建筑工地老板直招工人
  • 网站 建设 计划阿里云t5做网站
  • 中国网站排行榜微网站建设企划书
  • 郑州一站式网站搭建惠州专业网站建设价格
  • wordpress文章背景seo推广外包报价表