OpenCV求取轮廓线

// Threshold.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <cv.h>
#include <highgui.h>
int g_threshold = 100;
IplImage* img1= NULL;
IplImage* g_gray = NULL;
CvMemStorage* g_storage = NULL;
void on_trackbar(int)
{

	//将RGB转化为灰度图像
	cvCvtColor(img1, g_gray, CV_BGR2GRAY);

	//设定阈值为 g_threshold
    cvThreshold(g_gray, g_gray,  g_threshold, 255, CV_THRESH_BINARY);  

	//用来创建一个内存存储器,来统一管理各种动态对象的内存,比如说序列,这个函数返回一个新创建的内存存储器指针。
	//参数block_size对应内存器中每个内存块的大小,为0时内存块默认大小为64k(没设过大小,一直用的是默认0)。
	g_storage = cvCreateMemStorage(0);
	CvSeq* contours = 0;
	//默认mode为list,method设定轮廓近似的方法
	cvFindContours(g_gray, g_storage, &contours);
	cvZero(g_gray);

	if (contours)
	{
		//maxlevel为1,就画同层的轮廓
		cvDrawContours(g_gray, contours, cvScalarAll(255),cvScalarAll(255), 1);
	}

	//释放内存资源
	cvReleaseMemStorage(&g_storage);
	cvShowImage("Countours", g_gray);

	cvWaitKey(0);

}

void main()
{
	//以原始通道数读取图片1
	img1 = cvLoadImage("D://vc6.0//MSDev98//MyProjects//MachineVision//TestPic//PeppersRGB.bmp",CV_LOAD_IMAGE_UNCHANGED);
	g_gray = cvCreateImage(cvGetSize(img1), 8, 1);
	//命名窗口
	cvNamedWindow("Countours", CV_WINDOW_AUTOSIZE);
	cvCreateTrackbar("Threshold", "Countours", &g_threshold, 100, on_trackbar);
	on_trackbar(0);
	cvWaitKey(0);
	cvDestroyAllWindows();

}

本人对这一章学习兴趣不大,大致过了一下

时间: 2024-11-07 22:14:41

OpenCV求取轮廓线的相关文章

利用OpenCV求取图像的重心

转自:http://blog.csdn.net/lxiaoxiaot/article/details/6539834 不规则区域的矩,表示把一个归一化的灰度级图像函数理解为一个二维随机变量的概率密度. 这个随机变量的属性可以用统计特征--矩(Moments)来描述.通过假设非零的像素值表示区域,矩可以用于二值或灰度级的区域描述. Mpq = sigma(i)sigma(j) ip jq f(i,j) 其中x,y,i,j是区域点的坐标(在数字图像中的像素坐标). 令Xc,Yc表示区域重心的坐标,则

求取圆形区域内的平均灰度值

#include <cmath> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; const int kvalue = 15;//双边滤波邻域大小 const double PI = 3.14;//圆周率 int graylevel(Mat image, Mat dst, Point cen, int r)//求取圆形区域内的平均灰度值 { int graysum = 0, n = 0;

递归算法——求取斐波那契数列(2)

import java.util.Scanner; /** * Created by Administrator on 14-5-13. * 改进的计算斐波那契数列的方法,利用参数,经过测试运行时间会成倍减少 测试数据n=40 * 尾递归的本质是:将单次计算的结果缓存起来,传递给下次调用,相当于自动累积. * 尾部递归是一种编程技巧.递归函数是指一些会在函数内调用自己的函数, * 如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归. * 尾部递归的函数有助将算法转化成函数编程语言,

递归算法——求取斐波那契数列(1)

import java.util.Scanner; /** * Created by Administrator on 14-5-13. * 计算斐波那契数列 * * Result M(Problem prob) { if (<problem can be solved easily>) return <easy solution>; // The problem cannot be solved easily. Problem smaller1 = <reduce prob

欧几里得算法——求取最小公约数

1 import java.util.Scanner; 2 3 /** 4 * Created by Administrator on 14-5-20. 5 */ 6 public class Euclid { 7 public static void main(String[] args){ 8 Scanner scanner=new Scanner(System.in); 9 String str=scanner.nextLine(); 10 int a=Integer.parseInt(s

二维数组和最大字数组求取 2

题目: 返回一个二维数组的和最大字数组的和 要求: 随机生成二维数组,要求数组元素有正有负 二维数组首尾相连 数组中连续的n(n>=1)元素组成数组的字数组 源代码: import java.util.Random; import java.util.Scanner; public class erweixunhuanzishuzu { public static void main(String[] args) { //产生随机数组 int array[][] = new int[1000][

oracle 当前年到指定年的年度范围求取

如下面公式所示,求取2015到当前年(2018)的年度范围,当前年是由系统获取的,用到了sysdate和函数to_char,to_date. 当然,当前年也可以换成指定年份 SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2015', 'yyyy'), (ROWNUM - 1) * 12), 'yyyy') as nd FROM DUAL CONNECT BY ROWNUM <= months_between(to_date(to_char(sysdate,'yyyy'),

在python3下使用OpenCV 抓取摄像头图像并实时显示3色直方图

以下代码为在Python3环境下利用OpenCV 抓取摄像头的实时图像, 通过OpenCV的 calHist函数计算直方图, 并显示在3个不同窗口中. import cv2 import numpy as np from matplotlib import pyplot as plt import time cap  = cv2.VideoCapture(0) for i in range(0, 19):     print(cap.get(i)) while(1):     ret, fram

从键盘录入几个数,求取最大值?

首先声明一个方法名compare1的方法(也可以直接在main函数中执行) public static void compare1() {/*** 从键盘录入几个数,求取最大值*/System.out.println("从键盘录入5个数:");Scanner sc = new Scanner(System.in);int arr[] = new int[5];for(int i = 0;i<5;i++) {arr[i] = sc.nextInt();}System.out.pri