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

网站制作如皋电子商务网站建设规划方案

网站制作如皋,电子商务网站建设规划方案,dsm6.2 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.tj-hxxt.cn/news/22273.html

相关文章:

  • 华为域名购买知乎推广优化
  • 深圳城乡和住房建设局网站首页网站建设平台官网
  • 网站.cc域名网络精准营销推广
  • 网站如何做水晶按钮游戏推广公司怎么接游戏的
  • 室内设计有哪些网站今日大新闻
  • 网站推广技术哪家好推广链接怎么自己搞定
  • 推客易可以做自己的网站吗百度一下搜索引擎
  • 石家庄网站建设外贸seo智能优化软件
  • 公共事业管理在政府门户网站建设短链接在线生成免费
  • 英文网站源码下载上海seo外包公司
  • 最优惠的网站优化广告制作公司
  • 网站平台是怎么做财务的个人网站
  • 根据图片做网站用什么优化营商环境指什么
  • 网站手机版二维码怎么做免费外链发布
  • 公司做网站要企业认证手机系统优化软件哪个好
  • 网站开发浏览器的使用济南疫情最新消息
  • 电子商务网站建设 上海做网站排名服务热线
  • 长沙本地推广联系电话百度seo快速排名
  • 滨海做网站公司百度灰色关键词代发
  • python 网站开发 前端百度手机助手下载安卓
  • 建筑网格网站优化检测
  • 怎样建设网站郑州关键词优化平台
  • 二级域名网站建设规范湖南网站seo推广
  • 怎么做网站的外链郑州网络运营培训
  • 中小企业商务网站建设百度推广关键词越多越好吗
  • 响应式建站工具株洲网络推广
  • c2c电子商务平台有哪些百度搜索引擎关键词优化
  • 厦门微网站建设公司武汉seo排名
  • 政府网站风格设计优化营商环境发言稿
  • 小企业网站源码百度付费推广