案例48 三种方法得到正圆形图片
- 格式:pptx
- 大小:509.13 KB
- 文档页数:1
高手不会告诉你的圆形构图完整攻略本文为翻译文~~翻译不好敬请谅解你最后一次看到一张圆形照片是什么时候?这可能是一段时间了。
世界被正方形和长方形所统治。
有时候,一个圆形作为一个框架元素可以很美丽,它可以作为一个完美的构图伴奏,在缺乏直线和角落的情况下解放所包含的主题。
关于圈子的思考在机械世界中,圈子很强大。
除了制作大轮子,半圆形为重型结构提供了完美的拱形支撑。
作为构图框架,圈子也很强大。
它将眼睛吸引到框架的中间并集中注意力。
远远超过矩形或正方形,圆圈表示安全性和有限的界限,但尽管圆的强度也可以提供柔和,有机和诱人的外观。
它总是对包含的图像做出明确的陈述。
正方形和长方形包含图像并提示边界,但我们都知道本能地超越了边界,而圆圈则似乎说“这就是它,忘记超越的东西,看看主体!”圆圈提供了一条不同的构图路径,一条曲线在场景中运行良好的路径,但直线往往与边界不一致。
这个圆圈代表了一个框架元素,在很多方面,它更接近我们如何看待这个世界。
我觉得这个圈子是一个非常强大的构图工具,但现在大家已经习惯了长方形的图,所以原型构图被大家越用越少。
不是径向的当大多数人想到圆圈和构图时,他们立即就会想到放射状构图,如轮子上的辐条,俯视圆形楼梯间,海贝壳等等。
也许违反直觉,我认为大多数这些主题可能看起来更好的框架和方形或略呈矩形格式,这似乎通过方框边缘提供强烈的对比强调组成。
分开来首先,圆形框架区域需要分解才能正常工作; 需要有一些明确的构图意图或主题。
当然,正方形和长方形框架区域也是如此,但在圆圈的情况下,我觉得你的努力需要重新加倍,因为圆圈会强烈关注任何构图上的缺陷。
这里的圆圈以非常明显的方式分解。
有三个主要区域,但右侧的红色和白色条纹也增加了额外的区域; 通常情况下,中断的定义会更少,但是当您考虑这个概念时,可以通过在构图上移动圆圈,直到元素开始一起唱歌,看看有多少直边构图可以在一个圆圈内框起来。
三分规则我们都使用矩形和正方形的三分法,我们可以将相同的概念应用于圆,这可以使组合物具有强烈的深度感。
PPT图片怎么裁剪成圆形图
PPT图片怎么裁剪成圆形图?ppt中想要将图片裁剪成圆形,该怎么裁剪呢?下面我们就来看看ppt将图片裁剪成圆形的教程,需要的朋友可以参考下
1、本人用的是电脑自带的办公软件Microsoft PowerPoint(PPT),使用的是2010版本,比以前的版本多了好多功能;首先打开ppt——"新建"——"空白文档"
2、点击"插入"—"图片",导入需要编辑的图片
3、单击图片(图片四周出现四个小正方形和四个小圆)—选择"格式"功能下的“裁剪”
4、点击裁剪下有个小三角形△—纵横比选择正方形1:1 —形状选择为椭圆
5、这样能画出正圆
6、另存为选择需要保存的图片的格式,jpg,jpg均可
7、插入所需要编辑的图片,单击下图片,图片出现以下四个小正方形和四个小圆,如图
8、选择图片样式中的柔化边缘椭圆的样式,既可,图片变成边缘柔化的圆形
9、还可以选择图形样式中的——菱台形椭圆黑色
10、点击图片——选择"图片边框"点击下小三角——点击下"无轮廓"(即可去掉圆形的黑色边框)
11、另存为图片,"保存类型"选为jpg(常用格式)——点击"保存"。
《图像处理实例》之精确寻找⼀个圆以下是素材照⽚,就是寻找中间那个圆就可以了,说起来很简单,做起来不那么容易:代码很简单,主要是预处理,下⾯会基体说明!处理过程的例⼦:处理结果:⾸先说明⼀下怎么寻找⼀个圆?(本来都忘记这篇博⽂没写完了,还是⼀个同志发邮件给我才想起来)A.寻找圆的⼤⽅向预处理好的话,下⾯哪种⽅法都可以得到精确的圆!1.霍夫圆检测 ⼩伙伴们是不是有这种感觉,刚开始⽤霍夫的时候很兴奋,调调参数就能找到圆,但是随着你要求找的圆越来越复杂,是不是发现霍夫没⽤了? ⼀句话你处理的越好检测的就越好!!2.拟合圆 利⽤圆的函数去拟合,当然这⾥分为两种⽅案: a.点在圆的边缘,这个需要圆的函数拟合。
b.点在圆内,这个需要圆的⾯积+函数拟合。
3.最⼩外接圆 注意这不是和⽅法2相同!!这个⽅法是找到⼀个圆然后使得圆⾯积最⼩且包含所有点,算法实现应该有很多了,我个⼈认为⽤k-means寻找质⼼然后再找最⼩圆。
4.分⽔岭算法B.预处理--------->>>>>感觉没多⼤意义,貌似任何算法的基础都是预处理,具体问题具体对待上代码:(代码写到⼀半就没写了,原因不想说了,后⾯也不想改进了,其实针对具体问题还有很多改进的地⽅,精确寻找圆不是很困难的事)1 #include<iostream>2 #include <opencv2/opencv.hpp>3 #include <math.h>4using namespace cv;5using namespace std;67int Threshold_Value = 176;8const int Threshold_Max_value = 255;9const int Threshold_type_value = 3;1011 Mat input_image, threshold_image, output_image, Middle_image;1213void Threshold_Image_Bar(int, void *);1415int main(int argc, char**argv)16 {17 input_image = imread("b.jpg");18if (input_image.data == NULL) {19return -1; cout << "can't open image.../";20 }21 imshow("Sourse Image", input_image);22 blur(input_image, Middle_image, Size(3, 3), Point(-1, -1), 4);23 cvtColor(Middle_image, Middle_image, COLOR_RGB2GRAY);24const float init_pointx = saturate_cast<float>(Middle_image.cols / 7);25const float init_pointy = saturate_cast<float>(Middle_image.rows / 7);26 Rect roi_rect = Rect(Point2f(2 * init_pointx, 2 * init_pointy), Point2f(6 * init_pointx, 6 * init_pointy));27 Mat roi_Image = Middle_image(roi_rect);28 Middle_image = roi_Image;29 threshold(Middle_image, threshold_image, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);30 Mat kernel_rect = getStructuringElement(MORPH_ELLIPSE, Size(30, 30), Point(-1, -1));31 Mat kernel_circle = getStructuringElement(MORPH_ELLIPSE, Size(10, 10), Point(-1, -1));32 morphologyEx(threshold_image, threshold_image, MORPH_CLOSE, kernel_circle);33 Mat RedImage = threshold_image.clone();34 morphologyEx(RedImage, threshold_image, MORPH_OPEN, kernel_rect);35for (size_t i = 0; i < threshold_image.rows; i++)36 {37for (size_t j = 0; j < threshold_image.cols; j++)38 {39 RedImage.at<uchar>(i, j) = saturate_cast<uchar>(RedImage.at<uchar>(i, j) - threshold_image.at<uchar>(i, j));40 }41 }42 vector<vector<Point>> contours;43 vector<Vec4i> hierarchy;44 Mat showImage = Mat::zeros(RedImage.size(), CV_8UC1);45 findContours(RedImage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(-1, -1));46for (size_t i = 0; i < contours.size(); i++)47 {48if (minAreaRect(contours[i]).size.area() > 10000 && minAreaRect(contours[i]).size.height > 80 && minAreaRect(contours[i]).size.width > 80)//这个参数⼤概就可以49 {50 drawContours(showImage, contours, static_cast<int>(i), Scalar(255, 255, 255), 1);51 }52 }53 vector<Point> points;54for (int i = 0; i < showImage.rows; i++)55 {56for (int j = 0; j < showImage.cols; j++)57 {58if (showImage.at<uchar>(i, j) == 255)59 {60 points.push_back(Point(j, i));61 }62 }63 }64 Point2f center;65float radius;66if (points.data() == 0)67 {68 printf("Don't detecte point");69return -1;70 }71 minEnclosingCircle(points, center, radius);72 center.x += 2 * init_pointx;73 center.y += 2 * init_pointy;74 Mat result = Mat::zeros(RedImage.size(), CV_8UC3);75 circle(input_image, center, radius, Scalar(0, 0, 255), 2);76 waitKey(0);77return0;78 }79void Threshold_Image_Bar(int, void *)80 {81 threshold(Middle_image, threshold_image, 65, 255,THRESH_BINARY_INV);//110,6582 imshow("Threshold Image", threshold_image);83 Mat kernel = getStructuringElement(MORPH_RECT, Size(50, 50), Point(-1, -1));84 Mat RedImage = threshold_image.clone();85 morphologyEx(RedImage, threshold_image, MORPH_OPEN, kernel);86for (size_t i = 0; i < threshold_image.rows; i++)87 {88for (size_t j = 0; j < threshold_image.cols; j++)89 {90 RedImage.at<uchar>(i, j) = saturate_cast<uchar>(RedImage.at<uchar>(i, j) - threshold_image.at<uchar>(i, j));91 }92 }93 vector<vector<Point>> contours;94 vector<Vec4i> hierarchy;95 Mat showImage = Mat::zeros(RedImage.size(), CV_8UC1);96 findContours(RedImage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(-1, -1));97for (size_t i = 0; i < contours.size(); i++)98 {99if (boundingRect(contours[i]).area() > 20000)100 {101 drawContours(showImage, contours, static_cast<int>(i), Scalar(255, 255, 255), 1);102 }103 }104 vector<Point> points;105for (int i = 0; i < showImage.rows; i++)106 {107for (int j = 0; j < showImage.cols; j++)108 {109if (showImage.at<uchar>(i, j) == 255)110 {111 points.push_back(Point(j, i));112 }113 }114 }115 Point2f center;116float radius;117 minEnclosingCircle(points, center, radius);118 Mat result = Mat::zeros(RedImage.size(), CV_8UC3);119 circle(input_image, center, radius, Scalar(0, 0, 255), 2);120 }。
如何找圆心
三种找圆心的方法。
一、折叠法
这种方法适用于易折叠的圆形物体。
如图1所示,先把圆对折,使两个半圆完全重叠,这时圆中会出现一条折痕AB然后再换一个角度,用同样的方法得到另一条折痕CD这两条折痕(实际上就是这个圆的两条直径)的交点0就是圆心。
二、垂直平分线法
如图2所示,先在圆上任取三点A、B、C,然后连接AB AC并用尺找出AB AC的中点D E,最后分别过D E作AB AC的垂线,两条垂线的交点0就是圆心。
三、直角法
如图3所示,把一个三角板的直角顶点放在圆周上任意一点B处,三角板的两条直角边与圆交于A C两点,连接AC,线段AC就是这个圆的一条直径。
然后换一个角度,用同样的方法找到这个圆的另一条直径DF这两条直径的交点0就是这个圆的圆心。
图3。