OpenCV -- 获取轮廓照片

import cv2
img = cv2.imread( 'E:\A.jpeg' )
cv2.imshow( 'img', img )

gray = cv2.cvtColor( img, cv2.COLOR_BGR2GRAY )
ret, binary = cv2.threshold( gray, 127, 255, cv2.THRESH_BINARY )

contours, hierarchy = cv2.findContours( binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE )
cv2.drawContours( img, contours, -1, ( 160, 240, 120 ), 3 )

cv2.imshow( 'img1', img )
cv2.waitKey( 0 )
cv2.destroyAllWindows()

cv2.findContours()函数:

參数:

參1(是寻找轮廓的图像)

參2(表示轮廓的检索模式)有四种:

(1).cv2.RETR_EXTERNAL 仅仅检測外轮廓

(2).cv2.RETR_LIST 检測的轮廓不建立等级关系

(3).cv2.RETR_CCOMP 建立两个等级的轮廓,

上面的一层为外边界。

里面的一层为内孔的边界信息。

假设内孔内另一个连通物体,

这个物体的边界也在顶层

(4).cv2.RETR_TREE 建立一个等级树结构的轮廓

參3(method为轮廓的近似办法):

(1)cv2.CHAIN_APPROX_NONE 存储全部的轮廓点,

相邻的两个点的像素位置差不超过1,

即max(abs(x1-x2),abs(y2-y1))==1

(2).cv2.CHAIN_APPROX_SIMPLE 压缩水平方向。

垂直方向,对角线方向的元素,

仅仅保留该方向的终点坐标。

比如一个矩形轮廓仅仅需4个点来保存轮廓信息

(3).cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS

使用teh-Chinl chain 近似算法

返回值:

值1:

是轮廓本身。

值2:

每条轮廓相应的属性。

时间: 2024-10-11 13:36:34

OpenCV -- 获取轮廓照片的相关文章

OPENCV图像轮廓检测

前面在图像转换的时候学到canny算子,可以检测出图像的轮廓信息,但是,该算子检测到的轮廓信息还需要我们手动的用眼睛去识别,而实际工程应用中,我们需要得到轮廓的具体数学信息,这就涉及到今天的主题,图像轮廓检测. 一.图像轮廓检测 在opencv中,轮廓对应着一系列的点的集合,opencv提供了一个函数,用来获得这些点的集合 API:void finContours(输入图像,输出轮廓点集,输出向量,int 轮廓检索模式,int 轮廓近似方法,Point 轮廓点的可选偏移量) 注:1.输入图像,是

OpenCV获取摄像头视频并在MFC的Picture控件上显示

分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/04/2535190.html http://blog.sina.com.cn/s/blog_6dbe9bdb0100nii7.html http://blog.csdn.net/augusdi/article/details/8762961 #include "stdafx.h" #in

[iOS] photoKit获取所有照片

代码: - (NSMutableArray *)getAllPhoto{ NSMutableArray *arr = [NSMutableArray array]; // 所有智能相册 PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular op

Android开发之获取相册照片和获取拍照照片

在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: 一般就是写出这个方法 protected void getImageFromAlbum() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*");//相片类型 startActivityFo

Android开发教程--关于系统相机拍照获取的照片尺寸较小问题的解决

网上大部分的解决方案,都是如下方式: Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent,REQUEST_CODE_CAPTURE_CAMEIA); 拍照完成之后,回调: protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resul

opencv图像轮廓

最小外接圆 函数cv2.minEnclosingCircle() 可以帮我们找到一个对象的外切圆.它是所有能够包括对象的圆中面积最小的一个. 案例:现有下面这样一张图片,要求将图片中心的花朵标记出来. 代码: import numpy as np import cv2 as cv img=cv.imread("image.jpg",0) #为了显示方便,这里将图片进行缩放 x,y=img.shape img=cv.resize(img,(y//2,x//2)) #将图片二值化,由于前景

opencv:轮廓匹配

#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; RNG rng(12345); void contour_info(Mat &image, vector<vector<Point>> &contours); int main(int argc, char** argv) { Mat src1 = imread(

OpenCV获取图片所有对应坐标中的像素值

获取图片所有对应坐标中的像素值.直接上代码了 #include <iostream> #include "cv.h" #include <highgui.h> #include<fstream> using namespace std; int main() { IplImage *img = cvLoadImage("C:\\Users\\Sunstarisme\\Desktop\\Lemon\\All Frames\\2.bmp&quo

怎么SDCard上的获取相册照片

[java] view plain copy private String getRealPathFromURI(Uri contentUri) { Cursor cursor = null; String result = contentUri.toString(); String[] proj = {MediaStore.Images.Media.DATA}; cursor = managedQuery(contentUri, proj, null, null, null); if(curs