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

廊坊seo整站优化软件archdaily

廊坊seo整站优化软件,archdaily,网站空间容量,wordpress文章存在哪的前言:前面学习了数组和指针在C中的处理原理,本文通过自己编写一个图像处理的函数实例来加深对数组和指针的理解。为什么是图像处理呢,因为图像数据是一个二维矩阵,相当于一个二维数组,前面学习了一维数组,现…

前言:前面学习了数组和指针在C++中的处理原理,本文通过自己编写一个图像处理的函数实例来加深对数组和指针的理解。为什么是图像处理呢,因为图像数据是一个二维矩阵,相当于一个二维数组,前面学习了一维数组,现在可以看看指针是怎么来处理二维数组的。

目录

遍历OpenCV中图像像素方法一

遍历OpenCV中图像像素方法二

总结


正文:我们首先使用opencv图像处理库读入一张图像,然后对图像进行二值化(opencv库中已经集成了此功能,此处自己编写仅仅为了巩固指针和数组的知识)。

遍历OpenCV中图像像素方法一

代码如下:

#include <iostream>
#include <cstring>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main()
{Mat srcImage = imread("test.jpg");Mat srcGray;cvtColor(srcImage, srcGray, COLOR_BGR2GRAY);Mat outputImage = srcGray.clone();int rows = outputImage.rows;int cols = outputImage.cols*outputImage.channels();int threshold = 50;for (int i = 0; i < rows; i++){uchar* data = outputImage.ptr<uchar>(i);///获取第i行的首地址for (int j = 0; j < cols; j++){if (data[j] < threshold){data[j] = 255;}else{data[j] = 0;}}}imshow("src", srcImage);imshow("binary", outputImage);waitKey();return 0;
}

该方法中最重要的是这条语句:uchar* data = outputImage.ptr<uchar>(i);Mat类中的ptr函数返回的是某一行的首地址,ptr是一个模板函数,代码中它返回的是第i行的首地址。

第一个循环体内获取每行的首地址,第二个循环体内获取每行的每个像素值,并做阈值划分。前面文章《使用new创建动态数组》讲过,访问数组中的元素既可以用指针访问,也可以用数组的方括号表示法来访问,此处用的是方括号表示法,data[j]代表的是第i行中的第(j+1)个像素,通过双层循环对图像中每一行的每个像素做阈值划分,就完成了图像的二值化。

也可以通过指针的方式来访问图像中的每个像素,将上面代码中的循环体换成以下代码,运行的结果是一样的。

for (int i = 0; i < rows; i++){uchar* data = outputImage.ptr<uchar>(i);///获取第i行的首地址for (int j = 0; j < cols; j++){if ((*(data+j)) < threshold){*(data + j) = 255;}else{*(data + j) = 0;}}}

遍历OpenCV中图像像素方法二

方法一中通过获取每行的首地址来访问每行中的每个像素。也可以直接通过二维数组的整个数组的首地址来访问每个像素,代码如下:

#include <iostream>
#include <cstring>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main()
{Mat srcImage = imread("test.jpg");Mat srcGray;cvtColor(srcImage, srcGray, COLOR_BGR2GRAY);Mat outputImage = srcGray.clone();int rows = outputImage.rows;int cols = outputImage.cols*outputImage.channels();int threshold = 50;uchar* data = outputImage.data;for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){if (data[i*cols+j] < threshold){data[i*cols + j] = 255;}else{data[i*cols + j] = 0;}}}imshow("src", srcImage);imshow("binary", outputImage);waitKey();return 0;
}

方法二中最重要的是这条语句:uchar* data = outputImage.data; Mat类中的data指针指向的就是图像数据二维数组的首地址,该方法用的是数组的方括号表示法来访问每个像素。同理,循环体中也可以换成指针的方式来访问每个像素。循环体中的代码换成指针的方式如下:

for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){if (*(data+i*cols + j) < threshold){*(data + i * cols + j) = 255;}else{*(data + i * cols + j) = 0;}}}

总结

opencv中遍历图像像素的方法有十几种,本文通过4种遍历图像像素的方式编写了一个简单的图像二值化函数,既巩固了指针和数组的知识,又掌握了遍历opencv中图像像素的方法。

 

http://www.yayakq.cn/news/805714/

相关文章:

  • 建设一个网站用什么搭建大流量网站建设
  • 国外的网站可以做百度推广吗淘宝类网站开发
  • 做网站需要网络服务器紫色的网站
  • 深圳营销型网站建设公司选择哪家好普通的宣传网站用什么做
  • 江门网站建设联系电话展示型网站
  • wordpress用了cdn和缓存插件官方网站建设优化
  • 网站名称跟域名广州海珠网站开发定制
  • 网站建设需要做什么昆明做整站优化
  • led网站免费模板佛山企业网站开发公司
  • 查看企业信息的网站网络规划与设计报告
  • 做网站公司工资wordpress对话框模板
  • 河南网站建设推广公司wordpress 怎么删除主题
  • 安徽建设工程信息网官方网站如何找客户资源
  • 昆山高端网站建设开发商贸公司经营范围
  • 法律网站模板源码分享
  • 肇庆有哪家做企业网站的wordpress文章推送到微信
  • 网站编辑给续南明做的封面百度推广 帮做网站吗
  • 58同城网站建设推广网站建设豌豆荚app下载 官网
  • 东莞网站建设企业seo服务建议
  • 虎嗅wordpress模板seo的方法有哪些
  • 如何增加网站访问量网站建设意义必要性
  • 南通免费建设网站wordpress模板 门户网站
  • 景区网站做电子商务的特点百度seo关键词优化电话
  • 网站还需要备案么公众号同步到dede网站
  • 网站建设 考核指标wordpress小程序收录
  • 搭建网站的大致流程企业网站制作方案
  • 网站备案 域名不是自己的淘宝店铺购买的服务在哪里
  • 建设网站怎么搞英雄联盟世界排名
  • 网站开发微信支付功能2016优秀网站设计
  • 网站建设织梦源码wordpress主题更新