相关文章推荐
const double PI = 3.14;//圆周率 int graylevel(Mat image, Mat dst, Point cen, int r)//求取圆形区域内的平均灰度值 int graysum = 0, n = 0; for(int i = (cen.y - r); i <= (cen.y + r); ++i)//访问矩形框内的像素值 uchar* data = image.ptr(i); for(int j = (cen.x - r); j <= (cen.x + r); ++j) double d = (i-cen.y)*(i-cen.y) + (j-cen.x)*(j-cen.x); if(d < r*r) graysum += (int)data[j]; for(int i = (cen.y - r); i <= (cen.y + r); ++i)//画出圆,圆内像素值为平均灰度值 uchar* temp = dst.ptr(i); for(int j = (cen.x - r); j <= (cen.x + r); ++j) double d = (i-cen.y)*(i-cen.y) + (j-cen.x)*(j-cen.x); if(d < r*r) temp[j] = (int)(graysum / n); return(graysum / n); int main() Mat src_color = imread("1.png");//读取原彩色图 imshow("原图-彩色", src_color); Mat src_gray;//彩色图像转化成灰度图 cvtColor(src_color, src_gray, COLOR_BGR2GRAY); imshow("原图-灰度", src_gray); //imwrite("src_gray.png", src_gray); //声明一个单通道图像,像素值全为0,用来将霍夫变换检测出的圆画在上面 Mat dst(src_gray.size(), src_gray.type()); dst = Scalar::all(0); Mat bf;//对灰度图像进行双边滤波 bilateralFilter(src_gray, bf, kvalue, kvalue*2, kvalue/2); //imshow("灰度双边滤波处理", bf); //imwrite("src_bf.png", bf); vector circles;//声明一个向量,保存检测出的圆的圆心坐标和半径 HoughCircles(bf, circles, CV_HOUGH_GRADIENT, 1.5, 20, 130, 38, 10, 50);//霍夫变换检测圆 std::vector v;//保存圆心的横坐标减纵坐标的绝对值,用于区分两排灯 cout << "x=\ty=\tr=\ts=\tg=" << endl; for(size_t i = 0; i < circles.size(); i++)//把霍夫变换检测出的圆画出来 Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); int radius = cvRound(circles[i][2]); double s = 0;//计算圆的面积 s = PI * radius * radius; int average = 0; average = graylevel(bf, dst, center, radius);//计算平均灰度,并画出圆 circle( dst, center, 2, Scalar(255), -1, 8, 0 );//画出圆心 circle( dst, center, radius, Scalar(255), 1, 8, 0 );//画出圆的轮廓 v.push_back(abs(center.x-center.y));//存储圆心的横坐标减纵坐标的绝对值,用于区分两排灯 cout << center.x << "\t" << center.y << "\t" << radius << "\t" << s << "\t" << average << endl;//在控制台输出圆心坐标和半径 sort(v.begin(), v.end());//从小到大排序 std::vector points1, points2;//声明点向量,分别存储两排灯的圆心坐标 for (size_t i = 0; i < circles.size(); i++)//用来区分两排灯 Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); if (abs(center.x-center.y) < v[12]) points1.push_back(Point(center.x, center.y));//存储从左上到右下那排灯的圆心坐标 points2.push_back(Point(center.x, center.y));//存储从左下到右上那排灯的圆心坐标 cv::Vec4f line1, line2;//拟合直线 fitLine(Mat(points1), line1, CV_DIST_L2, 0, 0.01, 0.01); fitLine(Mat(points2), line2, CV_DIST_L2, 0, 0.01, 0.01); int x01 = (int)line1[2]; int y01 = (int)line1[3]; int x11 = (int)(x01 + 300*line1[0]); int y11 = (int)(y01 + 300*line1[1]); int x21 = (int)(x01 - 300*line1[0]); int y21 = (int)(y01 - 300*line1[1]); int x02 = (int)line2[2]; int y02 = (int)line2[3]; int x12 = (int)(x02 + 300*line2[0]); int y12 = (int)(y02 + 300*line2[1]); int x22 = (int)(x02 - 300*line2[0]); int y22 = (int)(y02 - 300*line2[1]); cv::line(dst, Point(x11, y11), Point(x21, y21), Scalar(255), 1);//画出直线 cv::line(dst, Point(x12, y12), Point(x22, y22), Scalar(255), 1); imshow("特征提取", dst); imwrite("chuli.png", dst); waitKey(); 一、灰度图像 灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域 黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。 因此,可以这样理解灰度图像,灰度图像即为一张单通 imread”功能将图像加载到工作空间 ,从而生成3D矩阵。 为了进一步处理图像,优选将图像转换为2D矩阵,即灰度图像。 这是通过将每个维度乘以一个常数,然后消除第三个维度来完成的。 该项目的下一步是在灰度图像上使用Sobel Operator。 Sobel操作员使用灰度图像创建一个新的二进制图像,其 所有对比度的变化都标记为1,而图像 对比度没有变化的位置将为零。 如标题为“ Sobel”的情节所示,这将导致所有硬币边缘都标记有白色,而其他所有东西均为黑色背景的图片。 为此,将两个蒙版(分别称为F1和F2)与图像的x方向和y方向进行卷积。 然后,这两个乘积的平方根将得出需要进一步处理的矩阵。 该矩阵在对比度发生变化的地方具有较大的值。 构造一个新的二进制矩阵,该矩阵的值大于阈值(通过反复试验得出)。 所有小于阈值的值都设置为零。 在完成Sobel操作之后, 在处理视频 ,需要对视频流 的图像帧进行区分,分离出其 的亮暗帧图像。区分亮暗图像,是依据图像的 平均 灰度值 来实现的。 我们知道,对于一幅灰度图像,每个像素点的 灰度值 可以通过指针来访问( i, j )处的 灰度值 (img->imageData+ i*img->widthStep)[j*img->nChannels+0] 当然,也可以通过cv
目录卷积神经网络(CNN)CNN网络的构成卷积层卷积的计算方法padding(填充)stride(步长)多通道卷积多卷积核卷积特征图大小池化层(Pooling)最大池化 平均 池化全连接层卷积神经网络的构建数据加载数据处理模型搭建模型编译模型训练模型评估总结 卷积神经网络(CNN) 了解卷积神经网络的构成 知道卷积的原理以及计算过程 了解池化的作用以及计算过程 利用全连接神经网络对图像进行处理存在以下两个问题: 需要处理的数据量大,效率低 假如我们处理一张 1000×1000 像素的图片,参
Adobe Photoshop是Adobe Systems开发和发行的图像处理软件,主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地进行图片编辑工作。PS有很多功能,在图像、图形、文字、视频、出版等各方面都有涉及。支持的系统有Windows、安卓与Mac OS, Linux操作系统用户可以通过使用Wine来运行Adobe Photoshop。 Photoshop的专...
计算图像的 平均 灰度值 与灰度均方差 Mat mat_mean, mat_stddev; meanStdDev(InputImage, mat_mean, mat_stddev);// 灰度图像的均值、均方差 m = mat_mean.at<double>(0, 0); s = mat_stddev.at<double>(0, 0); template = cv2.imread('pl2.jpg') #获得灰度图 template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) h, w = template_gray.shape[:2] # template_gray 为灰度图 m = np.reshape(template_gray, [1, w*h]) mean = m.sum()/(w*h) # 图像 平均 灰度值
MFC有四大类,View类是在框架类之上,所以如果你需要实现画面显示之类的,就只能在VIEW类 响应. 而Doc类是用于存储数据管理的类,他们是关联关系,Doc类储存,View类显示。 另外App类和Doc类都是从CCmdTarget类派生而来,所以只能接收命令消息和控件通知消息,View类与Frame框架类都是从CWnd类派生所以能够接收命令消息和控件通知消息还有windows消息三种消息. 最近在面试,每天会被考到很多知识点,这些知识点有些我已经看了十几遍,还是会反应慢或者记不住。回想我在学习过程 ,也是学了忘忘了学,没有重复个几十遍根本难以形成永久记忆。这次我复习和整理面试知识点的时候决定把CNN里面的关键创新点、容易疏忽的点都记录下来,方便快速查找回顾,于是就有了这篇像词典一样的永久更新的文章。 一.基础知识 1.1 BatchNorm/LayerNorm/InstanceNorm/GroupNorm 基础知识点 Batch Norm
在计算机 的实际应用 ,除了RGB表示方法外,还有一种用的比较多的表示方法就是HSV(又称HSB)表示方法。它把颜色分为三个参量,一个是色相Hue,具体表示在色相环上的一种纯色,一个是饱和Saturation,具体表示纯色在颜色 的百分比,当S=1时,表示颜色最纯,当S=0时,表示 灰度值 。一个是亮度Value,表示颜色的亮度,当V=0时,表示黑色。   HSV颜色系统在不破坏图像结构的基础上...
def compute_roundness(label_image): contours, hierarchy = cv2.findContours(np.array(label_image, dtype=np.uint8), cv2.RETR_TREE,
要计算 圆形 区域 内的像素均值和方差,你需要按照以下步骤进行: 1. 读取 DICOM 图像并解析像素数据。你可以使用类似 DCMTK 或 ITK 等 DICOM 库来完成这个任务。 2. 定义 圆形 区域 。你可以使用一个 圆形 心坐标和半径来表示它。 3. 遍历 圆形 区域 内的像素。你可以使用一个循环来遍历所有位于 圆形 区域 内的像素,并将它们的值加起来。 4. 计算像素均值。将遍历得到的像素值总和除以 圆形 区域 内的像素数,即可得到像素均值。 5. 计算像素方差。对于每个像素,将其值减去均值并平方,然后将所有差的平方加起来并除以像素数,即可得到像素方差。 下面是一个示例代码,它假设 圆形 区域 心坐标为 (x0, y0),半径为 r,图像数据存储在名为 data 的一维数组 ,其大小为 width*height: ```cpp // 定义 圆形 区域 int x0 = 100; // 圆心 x 坐标 int y0 = 100; // 圆心 y 坐标 int r = 50; // 半径 // 遍历 圆形 区域 内的像素并计算均值和方差 double sum = 0; double sum2 = 0; int count = 0; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { if ((x-x0)*(x-x0) + (y-y0)*(y-y0) <= r*r) { // 判断像素是否在 圆形 区域 内 double value = data[y*width + x]; sum += value; sum2 += value*value; ++count; // 计算均值和方差 double mean = sum / count; double variance = (sum2 - 2*mean*sum + count*mean*mean) / count; 需要注意的是,这个示例代码假设图像数据是以行优先的方式存储的,如果是列优先,则需要调整计算像素值的方式。
 
推荐文章