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

高考写作网站网站建设税率多少

高考写作网站,网站建设税率多少,学校官网网页怎么制作html,中国建设银行手机银行官方网站Opencv和C实现canny边缘检测_opencv边缘增强-CSDN博客 一、canny实现步骤 1、图像必须是单通道的#xff0c;也就是说必须是灰度图像 2、图像进行高斯滤波#xff0c;去掉噪点 3、sobel 算子过程的实现#xff0c;计算x y方向 、梯度#xff08;用不到#xff0c;但是…Opencv和C实现canny边缘检测_opencv边缘增强-CSDN博客 一、canny实现步骤 1、图像必须是单通道的也就是说必须是灰度图像 2、图像进行高斯滤波去掉噪点  3、sobel 算子过程的实现计算x y方向 、梯度用不到但是可以看看xy 两个组合起来的结果 以及梯度方向很重要 4、局部非极大值抑制 5、双阈值连接处理 具体可以分为上面的5个步骤下面一起边看原理边实现。 二、原理与实现 1、图像灰度化 如果是一张3通道的图像也就是我们常见的彩色图那么们就需要将其转换成一个灰度图其规则如下 1.浮点算法Gray R*0.3 G*0.59 B*0.11     2.整数方法Gray (R*30G*59B*11)/100     3.移位方法Gray (R*28G*151B*77 8     4.平均值法Gray (RGB)/3     5.仅取绿色Gray G 但是通常我们自己实现一般都是拿第一种实现的。 OpenCV转灰度图像特别简单只需调用函数 cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 即可。 code void ConvertRGB2GRAY(const Mat image, Mat imageGray) {if (!image.data || image.channels() ! 3){return;}// 创建一个单通道的灰度图像imageGray Mat::zeros(image.size(), CV_8UC1);// 取出存储图像的数组的指针 uchar* pointImage image.data;uchar* pointImageGray imageGray.data;int stepImage image.step;int stepImageGray imageGray.step;for (int i 0; i imageGray.rows; i){for (int j 0; j imageGray.cols; j){pointImageGray[i * stepImageGray j] 0.114 * pointImage[i * stepImage 3 * j] 0.587 * pointImage[i * stepImage 3 * j 1] 0.299 * pointImage[i * stepImage 3 * j 2];}} } 2、高斯滤波 在高斯滤波的时候先要生成一个2元高斯核然后进行高斯滤波其作用是去掉噪点其图像变的平滑起来 二元高斯函数 随着sigma的增大整个高斯函数的尖峰逐渐减小整体也变的更加平缓则对图像的平滑效果越来越明显。 高斯核 代码里面最后一定要归一化 void CreateGaussianKernel(int kernel_size, int sigma, Mat kernel) {const double PI 3.1415926;int center kernel_size / 2;kernel Mat(kernel_size, kernel_size,CV_32FC1);float segma_pow 2 * sigma * sigma; float sum 0;// 二元高斯函数for (size_t i 0; i kernel_size; i){for (size_t j 0; j kernel_size; j){float temp ((i - center) * (i - center) (j - center) * (j - center) )/ segma_pow;kernel.atfloat(i, j) 1 / (PI * segma_pow) * exp(-temp);sum kernel.atfloat(i, j);}}// 归一化for (size_t i 0; i kernel_size; i){for (size_t j 0; j kernel_size; j){kernel.atfloat(i, j) kernel.atfloat(i, j)/sum;}}}5*5 的高斯核那个核数一般是不能超过11 超过11 其效果均值一样了 高斯滤波 //******************高斯滤波************************* //第一个参数imageSource是待滤波原始图像 //第二个参数imageGaussian是滤波后输出图像 //第三个参数 kernel 是一个指向含有N个double类型数组 //第四个参数size是滤波核的尺寸 //************************************************************* void GaussianFilter(const Mat imageSource, Mat imageGaussian, Mat kernel, int size) {if (!imageSource.data|| imageSource.channels()!1){return;}imageGaussian Mat::zeros(imageSource.size(),CV_8UC1);float gaussArray[100];// 将 kernel 的方阵 变成一个一维度数组 这样在循环的时候啊就少了一次内循环int m 0;for (size_t i 0; i kernel.rows; i){for (size_t j 0; j kernel.cols; j){gaussArray[m] kernel.atfloat(i,j);m;}}//滤波for (int i 0; i imageSource.rows; i){for (int j 0; j imageSource.cols; j){int k 0;for (int l -size / 2; l size / 2; l){for (int g -size / 2; g size / 2; g){//以下处理针对滤波后图像边界处理为超出边界的值赋值为边界值int row i l;int col j g;row row 0 ? 0 : row;row row imageSource.rows ? imageSource.rows - 1 : row;col col 0 ? 0 : col;col col imageSource.cols ? imageSource.cols - 1 : col;//卷积和imageGaussian.atuchar(i, j) gaussArray[k] * imageSource.atuchar(row, col);k;}}}}}void TestGaussian() {Mat kernel;CreateGaussianKernel(5, 1, kernel);// 打印 高斯核for (int i 0; i kernel.rows; i){for (int j 0; j kernel.cols; j){cout kernel.atfloat(i, j);}cout endl;}Mat src imread(C:\\Users\\alber\\Desktop\\opencv_images\\529.jpg);Mat dst, imageGaussian;ConvertRGB2GRAY(src, dst);imwrite(C:\\Users\\alber\\Desktop\\opencv_images\\1\\1.jpg, dst);GaussianFilter(dst, imageGaussian, kernel, 5);imwrite(C:\\Users\\alber\\Desktop\\GaussianFilter.jpg, imageGaussian); } 3、实现sobel 算子 推导出X Y方向的核  【精选】Opencv 笔记5 边缘处理-canny、sobel、Laplacian、Prewitt_opencv 边缘处理_Σίσυφος1900的博客-CSDN博客 gradient ||dx||||dy|| theta atan(gradY / gradX) * 57.3  注意这里的角度转换 //******************Sobel算子计算X、Y方向梯度 以及 梯度方向角******************** //第一个参数imageSourc原始灰度图像 //第二个参数imageSobelX是X方向梯度图像 //第三个参数imageSobelY是Y方向梯度图像 //第四个参数 theta 是梯度方向角数组指针 下一步很重要 就是要用这个值来计算 //************************************************************* void SobelGradDirction(const Mat imageSource, Mat imageX, Mat imageY, Mat gradXY, Mat theta) {imageX Mat::zeros(imageSource.size(), CV_32SC1);imageY Mat::zeros(imageSource.size(), CV_32SC1);gradXY Mat::zeros(imageSource.size(), CV_32SC1);theta Mat::zeros(imageSource.size(), CV_32SC1);int rows imageSource.rows;int cols imageSource.cols;int stepXY imageX.step;int step imageSource.step;/*Mat.step参数指图像的一行实际占用的内存长度因为opencv中的图像会对每行的长度自动补齐8的倍数编程时尽量使用指针指针读写像素是速度最快的使用at函数最慢。*/uchar* PX imageX.data;uchar* PY imageY.data;uchar* P imageSource.data;uchar* XY gradXY.data;for (int i 1; i rows - 1; i){for (int j 1; j cols - 1; j){int a00 P[(i - 1) * step j - 1];int a01 P[(i - 1) * step j];int a02 P[(i - 1) * step j 1];int a10 P[i * step j - 1];int a11 P[i * step j];int a12 P[i * step j 1];int a20 P[(i 1) * step j - 1];int a21 P[(i 1) * step j];int a22 P[(i 1) * step j 1];double gradY double(a02 2 * a12 a22 - a00 - 2 * a10 - a20);double gradX double(a00 2 * a01 a02 - a20 - 2 * a21 - a22);imageX.atint(i, j) abs(gradX);imageY.atint(i, j) abs(gradY);if (gradX 0){gradX 0.000000000001;}theta.atint(i, j) atan(gradY / gradX) * 57.3;theta.atint(i, j) (theta.atint(i, j) 360) % 360;gradXY.atint(i, j) sqrt(gradX * gradX gradY * gradY);//XY[i*stepXY j*(stepXY / step)] sqrt(gradX*gradX gradY*gradY);}}convertScaleAbs(imageX, imageX);convertScaleAbs(imageY, imageY);convertScaleAbs(gradXY, gradXY); }这个不明显所以我打算换个图像test 4、局部非极大值抑制 这里我们就要用到上面一步在sobel里面计算求得的x y 方向以及梯度方向的那些 东西了。 原理 拿到当前点的梯度方向[0,360]判断其在那个区域,计算梯度方向一个方向两个值在不同权重下wdy/dx的灰度值t1 t2 最后判断当前点灰度值current 和t1 t2的大小比较如果当前值current小于t1 t2中的任何一个那么当前的点就不会是边缘的候选点current0 下面我们看一下梯度的分布 [0-45] U[180-225] [45-90] U[225-270] [90-135] U[270-315] [135-180] U[315-360] code: /// summary /// 局部极大值抑制 计算八领域 沿着该点梯度方向比较前后两个点的幅值大小若该点大于前后两点则保留若该点小于前后两点任意一点则置为0 /// /summary /// param nameimageInput 输入的图像/param /// param nameimageOutput/param /// param nametheta/param /// param nameimageX /param /// param nameimageY/param void NonLocalMaxValue(const Mat imageInput, Mat imageOutput, const Mat theta, const Mat imageX, const Mat imageY) {if (!imageInput.data || imageInput.channels() ! 1){return;}imageOutput imageInput.clone();int rows imageOutput.rows;int cols imageOutput.cols;int g00, g01, g02, g10, g11, g12, g20, g21, g22;int g1, g2, g3, g4;for (size_t i 1; i rows-1; i){for (size_t j 1; j cols-1; j){// 第一行g00 imageOutput.atuchar(i - 1, j - 1);g01 imageOutput.atuchar(i - 1, j);g02 imageOutput.atuchar(i - 1, j1);// 第二行g10 imageOutput.atuchar(i , j - 1);g11 imageOutput.atuchar(i , j);g12 imageOutput.atuchar(i, j 1);// 第三行g20 imageOutput.atuchar(i1, j - 1);g21 imageOutput.atuchar(i1, j);g22 imageOutput.atuchar(i1, j 1);// 当前点的梯度方向 int direction theta.atint(i, j);g1 0; g2 0;g3 0;g4 0;// 保存亚像素点插值得到的灰度值 double t1 0;double t2 0;// 计算权重 double w fabs((double)imageY.atuchar(i,j) / (double)imageX.atuchar(i, j));if (w0){w 0.0000001;}if (w1){w 1 / w;}// g00 g01 g02// g10 g11 g12// g20 g21 g22// if ((0 direction direction 45) || 180 direction direction 225){t1 g10 * (1 - w) g20 * (w);t2 g02 * (w)g12 * (1 - w);}if ((45 direction direction 90) || 225 direction direction 270){t1 g01 * (1 - w) g02 * (w);t2 g20 * (w)g21 * (1 - w);}if ((90 direction direction 135) || 270 direction direction 315){t1 g00 * (w)g01 * (1 - w);t2 g21 * (1 - w) g22 * (w);}if ((135 direction direction 180) || 315 direction direction 360){t1 g00 * (w)g10 * (1 - w);t2 g12 * (1 - w) g22 * (w);}if (imageInput.atuchar(i,j)t1 || imageInput.atuchar(i, j) t2){imageOutput.atuchar(i, j) 0;}}}} 5、 双阈值连接处理 双阈值处理 给定一个高阈值high   一个低阈值low, low*[1.5,2]high 这个是给定规则 判断条件就是                       当前currentlow  那么current0                        lowcurrenthight  current 不处理                         currenthight   current255 /// summary /// 双阈值原理 /// 制定一个低阈值 L 一个 高阈值 H一般取H为整体图像灰度分布的 7成 并且H为1.5-2L /// 灰度值L gray0, grayH gray255; /// /summary /// param nameimageIn/param /// param namelow/param /// param namehight/param void DoubleThreshold(Mat imageIn, const double low, const double hight) {if (!imageIn.data || imageIn.channels() ! 1){return;}int rows imageIn.rows;int cols imageIn.cols;double gray;for (size_t i 0; i rows ; i){for (size_t j 0; j cols ; j){gray imageIn.atuchar(i, j);gray gray hight ? (255) : (gray low) ? (0) : gray;imageIn.atuchar(i, j) gray;}} }将边缘链接起来 经过上每一步的双阈值处理我们基本上已经拿到了边缘点的候选点下一步就是将这些边缘点联合起来组成一个边缘轮廓 这里我们再次使用双阈值的机制  low  和 hight   和当前点的灰度值current  规则如下 current  的8邻域的灰度值 M介于【lowhight】中有可能是边缘点这个领域的点M255 并且回退  如果领域类没有 说明这个点是一个孤立的点 不做处理 最后判断图像中所有的点不是255 就是0 生成边缘 void DoubleThresholdLink(Mat imageInput, double lowTh, double highTh) {if (!imageInput.data || imageInput.channels() ! 1){return;}int rows imageInput.rows;int cols imageInput.cols;double gray;for (size_t i 1; i rows-1; i){for (size_t j 1; j cols-1; j){gray imageInput.atuchar(i, j);if (gray255){continue;}bool reback false;// 寻找8领域中是否有介于low 和hight 的值 for (size_t k -1; k 2; k){for (size_t l -1; l 2; l){if (k 0 l 0) //当前点 {continue;}double t imageInput.atuchar(i k, j l);if (t lowTh thighTh){imageInput.atuchar(i k, j l) 255;reback true;}}}// 回退 if (reback){if (i 1) i--;if (j 2)j - 2;}}}// 最后调整 for (int i 0; i rows; i){for (int j 0; j cols; j){if (imageInput.atuchar(i, j) ! 255){imageInput.atuchar(i, j) 0;}}}} opencv 库结果 还是用opencv库吧结果比这个好多了  三、halcon 效果对比 halcon的效果更好 code read_image (Grayimage, C:/Users/alber/Desktop/opencv_images/1/grayImage.jpg) edges_sub_pix (Grayimage, Edges, canny, 1, 20, 40)
文章转载自:
http://www.morning.cjcry.cn.gov.cn.cjcry.cn
http://www.morning.zhoer.com.gov.cn.zhoer.com
http://www.morning.nrftd.cn.gov.cn.nrftd.cn
http://www.morning.fllfc.cn.gov.cn.fllfc.cn
http://www.morning.ghjln.cn.gov.cn.ghjln.cn
http://www.morning.bxrlt.cn.gov.cn.bxrlt.cn
http://www.morning.jthjr.cn.gov.cn.jthjr.cn
http://www.morning.fldrg.cn.gov.cn.fldrg.cn
http://www.morning.bsgfl.cn.gov.cn.bsgfl.cn
http://www.morning.fnmtc.cn.gov.cn.fnmtc.cn
http://www.morning.byywt.cn.gov.cn.byywt.cn
http://www.morning.qdscb.cn.gov.cn.qdscb.cn
http://www.morning.djbhz.cn.gov.cn.djbhz.cn
http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn
http://www.morning.nxbkw.cn.gov.cn.nxbkw.cn
http://www.morning.bdgb.cn.gov.cn.bdgb.cn
http://www.morning.chzbq.cn.gov.cn.chzbq.cn
http://www.morning.smcfk.cn.gov.cn.smcfk.cn
http://www.morning.hdtcj.cn.gov.cn.hdtcj.cn
http://www.morning.pqsys.cn.gov.cn.pqsys.cn
http://www.morning.youyouling.cn.gov.cn.youyouling.cn
http://www.morning.sftrt.cn.gov.cn.sftrt.cn
http://www.morning.fqtzn.cn.gov.cn.fqtzn.cn
http://www.morning.pqnps.cn.gov.cn.pqnps.cn
http://www.morning.qscsy.cn.gov.cn.qscsy.cn
http://www.morning.jrqw.cn.gov.cn.jrqw.cn
http://www.morning.xhqr.cn.gov.cn.xhqr.cn
http://www.morning.xq3nk42mvv.cn.gov.cn.xq3nk42mvv.cn
http://www.morning.rhchr.cn.gov.cn.rhchr.cn
http://www.morning.kfmlf.cn.gov.cn.kfmlf.cn
http://www.morning.lhyhx.cn.gov.cn.lhyhx.cn
http://www.morning.msgcj.cn.gov.cn.msgcj.cn
http://www.morning.qpsdq.cn.gov.cn.qpsdq.cn
http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn
http://www.morning.lcwhn.cn.gov.cn.lcwhn.cn
http://www.morning.lonlie.com.gov.cn.lonlie.com
http://www.morning.hyhzt.cn.gov.cn.hyhzt.cn
http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn
http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn
http://www.morning.dfmjm.cn.gov.cn.dfmjm.cn
http://www.morning.mmhaoma.com.gov.cn.mmhaoma.com
http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn
http://www.morning.trlhc.cn.gov.cn.trlhc.cn
http://www.morning.rhzzf.cn.gov.cn.rhzzf.cn
http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn
http://www.morning.thzgd.cn.gov.cn.thzgd.cn
http://www.morning.pjtnk.cn.gov.cn.pjtnk.cn
http://www.morning.lsjtq.cn.gov.cn.lsjtq.cn
http://www.morning.mbpfk.cn.gov.cn.mbpfk.cn
http://www.morning.grtwn.cn.gov.cn.grtwn.cn
http://www.morning.nzmw.cn.gov.cn.nzmw.cn
http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn
http://www.morning.ysybx.cn.gov.cn.ysybx.cn
http://www.morning.bprsd.cn.gov.cn.bprsd.cn
http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com
http://www.morning.hmgqy.cn.gov.cn.hmgqy.cn
http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn
http://www.morning.nwgkk.cn.gov.cn.nwgkk.cn
http://www.morning.rytps.cn.gov.cn.rytps.cn
http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn
http://www.morning.lmqfq.cn.gov.cn.lmqfq.cn
http://www.morning.pylpd.cn.gov.cn.pylpd.cn
http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn
http://www.morning.kcnjz.cn.gov.cn.kcnjz.cn
http://www.morning.hrjrt.cn.gov.cn.hrjrt.cn
http://www.morning.qdxkn.cn.gov.cn.qdxkn.cn
http://www.morning.sqqkr.cn.gov.cn.sqqkr.cn
http://www.morning.fwwkr.cn.gov.cn.fwwkr.cn
http://www.morning.smszt.com.gov.cn.smszt.com
http://www.morning.rmfw.cn.gov.cn.rmfw.cn
http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn
http://www.morning.horihe.com.gov.cn.horihe.com
http://www.morning.lfjmp.cn.gov.cn.lfjmp.cn
http://www.morning.jlmrx.cn.gov.cn.jlmrx.cn
http://www.morning.ngznq.cn.gov.cn.ngznq.cn
http://www.morning.rgnp.cn.gov.cn.rgnp.cn
http://www.morning.bypfj.cn.gov.cn.bypfj.cn
http://www.morning.ylyzk.cn.gov.cn.ylyzk.cn
http://www.morning.ztqj.cn.gov.cn.ztqj.cn
http://www.morning.kjcll.cn.gov.cn.kjcll.cn
http://www.tj-hxxt.cn/news/275283.html

相关文章:

  • 视频解析wordpress镇江百度seo
  • 网站突然打不开了龙华网网站
  • 设计高端网站哪家好广州广告公司排行榜
  • 上海注册公司核名在哪个网站北京 网站开发 大兴
  • 网站推广的方法pptseo博客大全
  • 怎么向网站添加型号查询功能广州手机建站模板
  • 手机网站报价单模板网站原型设计流程
  • 南山的网站建设公司网站开发中使用框架吗
  • 网站建设中提示页面水果网站源码
  • 彩票娱乐网站建设开发为什么网站开发需要写php
  • 科技发明seo网站建设 厦门
  • 四川网站建设外包wordpress amp插件
  • 松岗做网站公司网站交互主要做什么的
  • 百度商桥怎么和网站湖南人文科技学院录取查询
  • 衡阳手机网站建设百度搜索广告推广
  • iis7 网站防盗链公司网站友情链接怎么做副链
  • apple官网登录入口seo优化是啥
  • 韶关建设网站酒店网站 方案
  • 购物网站国外莞城网站仿做
  • 西安网站建设的费用广告公司网站设计策划书
  • 网站怎么做下载网页网站建设忄金手指专业
  • 一个页面对网站如何建设h5和网站的区别
  • 电商网站建设代理商wordpress集成api
  • 深圳做网站推广排名wordpress wp-content 权限
  • 网站开发行业新闻大型门户网站建设流程
  • 零基础学做网站要多久做微商进哪个网站安全
  • seo优秀网站莆田企业自助建站系统
  • 公司经营范围 网站开发做速卖通的素材有哪些网站
  • php网站开发全程实例免费查询企业联系方式
  • 少儿编程自学网站乐清装修网站哪个好