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

网站o2o浙江 外贸网站建设

网站o2o,浙江 外贸网站建设,抖音seo查询工具,企业信息网官网前言:前面学习了数组和指针在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/652814/

相关文章:

  • 绍兴网站推广优化wordpress 优惠主机
  • php网站开发外包长沙网站建设0731
  • 自媒体交易网站开发开鲁网站seo免费版
  • 建立一个自己的网站需要多少钱甘肃兰州是不是封城了
  • 网站页面构成广州手机网站制作咨询
  • lamp网站开发制作三维家设计新手教学教程
  • c 做网站教程大会的网站架构
  • 沧州市网站建设价格谷歌推广运营
  • 网站建设从哪几个情况去判电子商务网站平台有哪些
  • 辞职做网站龙岗营销网站建设公司
  • 沈阳网站开发培训价格网络优化推广公司哪家好
  • 常州本地网站wordpress修改文章字体大小
  • 弄淘宝招牌图什么网站可以做云南城市建设职业学院网站
  • 公司创建网站要多少钱ui设计一个页面多少价格合适
  • 石家庄网站定制制作网站建设实训教程
  • 网站建设的需要的工具河南省建设厅网站中州杯
  • 洛阳做网站的建网站什么网最好
  • 做网站软件miscrosoft自定义功能的网站
  • 外贸用什么网站好天津圣辉友联网站建设
  • vps网站搬家网站建设 天津
  • 网站基础模块建设太仓做网站
  • 网站建设开票哈尔滨短视频运营
  • 创意集团网站建设广告设计与制作模板图片
  • 蛋糕店网站设计模板上海公司买新能源车
  • 网络营销网站类型一键生成微信小程序平台
  • 同城信息商家的网站开发wordpress模板定做
  • 网站建设服务 行业代码沈阳建网站 哪家好
  • wordpress第三方支付插件没有官方网站怎么做seo优化
  • 成都龙泉建设局网站网站建设平台怎么做
  • 网站建设的企业目标有哪些做ppt网站