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

陕西省医院信息化建设规范与测评标准—网站建设评分标准与方法网站搜索查询

陕西省医院信息化建设规范与测评标准—网站建设评分标准与方法,网站搜索查询,企业优化方案,一个新产品的营销方案学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1702字,预计阅读4分钟 前言 前阵子在做方案时,得了几张骨钉的图片,骨科耗材批号效期管理一直是比较麻烦的,贴RFID标签成本太高,所以一般考虑还是…

学更好的别人,

做更好的自己。

——《微卡智享》

f2fc705bea7d6f4019ad9444def991bd.jpeg

本文长度为1702,预计阅读4分钟

前言

前阵子在做方案时,得了几张骨钉的图片,骨科耗材批号效期管理一直是比较麻烦的,贴RFID标签成本太高,所以一般考虑还是OCR的识别比较好,因为本身骨钉的字符是按圆印上去的,直接截取图片进行OCR没法识别,需要经过图像处理后再识别,所以这篇就是学习一下OpenCV的极坐标变换函数。

0a9b50b8a43bc304eb3b983fe49b1e9b.png

实现效果

c46d70663c2e837eaa5b470e682428e3.jpeg

源图像

95c69736b73459f13bb5000d3b30dea5.png查找出骨钉后用极坐标变换生成的图像

图像本来就是手机拍的,反光也比较厉害,所以本篇主要就是介绍极坐标变换,最后的OCR识别就不在这个范围内了。

极坐标变换函数 

void cv::warpPolar(InputArray   src, —原图像,单通道灰度图和三通道彩色图都可OutputArray dst,  —输出图像,与原图像具有相同的数据类型和通道数Size   dsize, —目标图像大小,如图不填这个值或dsize两个值中的某个值Point2f  center, —极坐标变换时原点坐标double   maxRadius, —极坐标系的极半径最大值int   flags ) —插值方法与极坐标映射方法标志。方法之间通过“+”或者“|”号进行连接

重点说明:

dsize:目标图像大小,Size(0,0)主要就是填写里面的width和height

  1. 当width和height两个值均<=0(默认),则目标图像将具有(几乎)相同的源边界圆面积

  2. 当width>0并且height <= 0,目标图像区域将与边界圆区域按比例缩放

  3. 当width和height都 > 0, 目标图像将具有给定的大小,因此边界圆的面积将缩放为dsize


flags:插值方法与极坐标映射方法标志

插值方法:图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,一般分为:

  •       INTER_NEAREST - 最邻近插值

  •       INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法

  •       INTER_AREA -区域插值

  •       INTER_CUBIC - 4x4像素邻域内的双立方插值

  •       INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值

这个我们一般都默认为INTER_LINEAR - 双线性插值即可。
 

极坐标映射方法里面就三个,主要是极坐标变换、半对数极坐标变换和逆变换。

  • WARP_POLAR_LINEAR - 极坐标变换

  • WARP_POLAR_LOG - 半对数极坐标变换

  • WARP_INVERSE_MAP - 逆变换

核心来说其实就是两个极坐标变换和半对数极坐标变换,它们两个都是由圆变换为矩形,而逆变换就是针对两种变换由矩形再转为圆。逆变换在原来的flags后面用“+”连接即可。


warpPolar的起始位置和图像旋转角度

1fe39662c375bef0c183bf722d6a9220.png

极坐标变换的起始位置默认就是3点钟的方向,上图中用蓝色箭头指的就是开始的位置,从3点钟方向顺时针来进行变换。

生成的矩形默认是向下垂直排列的,按我们自己的习惯肯定还需要将图像进行旋转,所以转换完后需要用rotate做一个图像的旋转

代码如下:

//极坐标变换
//参数 flags=INTER_LINEAR 双线性插值
Mat warpPolarMat(Mat src, int flags = INTER_LINEAR + WARP_POLAR_LINEAR) {// 圆心坐标Point2f center = Point2f(src.cols / 2, src.rows / 2);// 圆的半径double maxRadius = min(center.y, center.x) - 1;// 圆的周长int circumference = maxRadius * 2 * 3.14;//输出图像Mat dst;// 极坐标变换, Size()表示OpenCV根据输入自行决定输出图像尺寸warpPolar(src, dst, Size(0, 0), center, maxRadius, flags);// 改变结果方向rotate(dst, dst, ROTATE_90_COUNTERCLOCKWISE);return dst;
}

cfb7caebbfacadf1c514bb6430512d1e.png

实现思路及完整代码

#实现步骤
1图像简单处理(灰度图、中值滤波)
2霍夫圆检测获取到图像中的骨钉
3将获取到的圆每个分别截取出来进行极坐标变换显示出来

完整代码

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;//显示窗口设置  
//参数  img 显示的图像源,
//      winname 显示的窗口名称,
//      pointx  显示的坐标x
//      pointy  显示的坐标y
void setshowwindow(Mat img, string winname, int pointx, int pointy)
{//设置显示窗口namedWindow(winname, WindowFlags::WINDOW_NORMAL);//设置图像显示大小resizeWindow(winname, img.size());//设置图像显示位置moveWindow(winname, pointx, pointy);
}//极坐标变换
//参数 flags=INTER_LINEAR 双线性插值
Mat warpPolarMat(Mat src, int flags = INTER_LINEAR + WARP_POLAR_LINEAR) {// 圆心坐标Point2f center = Point2f(src.cols / 2, src.rows / 2);// 圆的半径double maxRadius = min(center.y, center.x) - 1;// 圆的周长int circumference = maxRadius * 2 * 3.14;//输出图像Mat dst;// 极坐标变换, Size()表示OpenCV根据输入自行决定输出图像尺寸warpPolar(src, dst, Size(0, 0), center, maxRadius, flags);// 改变结果方向rotate(dst, dst, ROTATE_90_COUNTERCLOCKWISE);return dst;
}int main(int argc, char** argv) {//测试图片文件  string testfile = "E:/DCIM/imagetest/06.png";//读取图片Mat src = imread(testfile);//修改图片大小setshowwindow(src, "src", 50, 200);imshow("src", src);//灰度图Mat gray;cvtColor(src, gray, COLOR_BGR2GRAY);//中值滤波medianBlur(gray, gray, 9);//霍夫圆检测vector<Vec3f> circles;HoughCircles(gray, circles, HOUGH_GRADIENT, 1, 50, 100, 100);//绘制检测到的圆型for (size_t i = 0; i < circles.size(); ++i) {Vec3f item = circles[i];//绘制检测到的圆circle(src, Point(item[0], item[1]), item[2], Scalar(0, 0, 255));//根据圆点和半径生成矩形Rect rect = Rect(Point(item[0] - item[2], item[1] - item[2]), Point(item[0] + item[2], item[1] + item[2]));//截图到当前圆的图像Mat rectsrc = src(rect);//极坐标变换Mat rectdst, showmat;rectdst = warpPolarMat(rectsrc);//设置当前圆显示位置String title = "circle" + to_string(i);String title2 = "roi" + to_string(i);if ((i % 2) == 0) {setshowwindow(rectsrc, title, 50, rectsrc.rows * (i / 2) + 2);setshowwindow(rectdst, title2, 50 + rectsrc.cols + 2, rectsrc.rows * (i / 2) + 2);}else {setshowwindow(rectsrc, title, (rectsrc.rows + rectdst.rows) * 2 , rectsrc.rows * (i / 2) + (i % 2) + 2);setshowwindow(rectdst, title2, (rectsrc.rows + rectdst.rows) *2 + rectsrc.rows , rectsrc.rows * (i / 2) + (i % 2) + 2);}imshow(title, rectsrc);imshow(title2, rectdst);}waitKey();return 0;
}

1c6afad8802f633d58cadcdf05fc5e60.png

1fe847886a1330a8da0c8853da99c40e.png

往期精彩回顾

c7a1c26550d9267ace9e00c80a1fb4a3.jpeg

Android Aidl跨进程通讯(四)--接口回调,服务端向客户端发送数据

 

598555bff365779d31581bb37fa7e2c1.jpeg

Android Aidl跨进程通讯(三)--进阶使用

 

18c0fc73b7f89d8996a9320234446550.jpeg

Android Aidl跨进程通讯(二)--异常捕获处理

http://www.15wanjia.com/news/175398.html

相关文章:

  • 网站制作新技术该产品在英文站及多语言网站
  • 攀枝花建设集团网站dw中怎样做网站二级页面
  • 网站菜单效果凡科官网首页
  • 网站建设公众网页设计制作基础
  • 海口的网站建设公司flex 做网站
  • 龙华营销型网站建设公司wap网站分享代码
  • 外国网站上做Task湖南建设网站公司
  • 临西网站建设价格深圳培训公司网站建设
  • 网站开发合同受托方做平面免费接单网站
  • 黄骗免费网站做文案公众号策划兼职网站
  • 古交市网站建设公司263个人登录入口
  • 新加坡建设网站简历模板网站免费
  • 深圳专业网站制作技术浙江省建设建材工会网站
  • 移动端模板网站建设网站制作说明
  • 网站301在哪做网站首页鲁大师
  • 网站建设jiq我的网站百度怎么搜索不到
  • 苏州网站建设设计制作公司怎么样室内设计平面布置图
  • 求网站晚上睡不着2021展示型网站php
  • 自己能网站建设建设学习网站
  • 单位门户网站建设存在问题企业网站排名提升
  • 扁平风格企业网站源码成都企业网站建设方案
  • 炫酷html5网站模板寿光人才网招聘网
  • 静态页优秀网站离婚证app制作软件
  • 做的网站没流量北京网站制作公司兴田德润在那里
  • 阿里云网站域名绑定高仿服装网站建设
  • 新手建站微信的微网站模板下载
  • 网站建设备案条件一个人可以完成网站建设吗
  • 装修公司网站wordpress 模板新手怎么优化网站
  • 网站建设 版权归属房地产政策最新消息
  • 网站后台添加文章后怎么不显示西乡做网站多少钱