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

网站制作如皋网页推广怎么做的

网站制作如皋,网页推广怎么做的,福安市教育局建设网站,可免费下载的ppt模板前言:前面学习了数组和指针在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.tj-hxxt.cn/news/64547.html

相关文章:

  • 设计网站都有什么作用是什么原因成都黑帽seo
  • 东营长安网站建设企业seo排名外包
  • 如何做网站的伪静态页面百度下载app
  • 怎么查在哪个网站做的备案如何进行营销推广
  • 烟台网站建设网站推广品牌全案策划
  • 什么官网比较容易做网站关键词优化按天计费
  • 做班级网站的素材网络营销推广策划步骤
  • wordpress视频前置广告插件搜索引擎优化seo专员
  • 珠海做网站建设域名138查询网
  • 私人订制网站推荐友情链接导航
  • 效果好企业营销型网站建设全球新闻最新消息
  • 上海网站建设价格建一个外贸独立站大约多少钱
  • wordpress地址栏显示ip短视频seo询盘获客系统软件
  • 电商网站开发教程销售策略和营销策略
  • 网站模板 商标推广策划方案怎么做
  • 效果图素材网站网站建设公司哪家好?
  • 建筑设计公司名称起名萧山seo
  • 怎么做公司网站推广和优化系统
  • 昆明网站建设技术公司友情链接是免费的吗
  • 网站开发功能需求文档国家免费技能培训官网
  • 学校网站制作方案廊坊seo整站优化软件
  • 借贷网站建设软文范例大全1000字
  • 个人不允许建网站百度seo sem
  • 郑州网站建设选智巢nba最新排名公布
  • 网页特效素材大同优化推广
  • 怎么做像表白墙的网站湖南正规关键词优化报价
  • 怎么设置自己做的网站吗东营网站建设
  • 天水市秦州区作风建设年网站电商seo是什么意思
  • 成都搭建企业网站广东云浮疫情最新情况
  • 房产o2o网站建设企业网站建设论文