当前位置:首页 » 操作系统 » opencv算法

opencv算法

发布时间: 2022-01-11 03:06:18

㈠ opencv中有没有实现ostu算法

没有 需要自己写函数 比如:

int Otsu(IplImage* src)
{
int height=src->height;
int width=src->width;
long size = height * width;

//histogram
float histogram[256] = {0};
for(int m=0; m < height; m++)
{
unsigned char* p=(unsigned char*)src->imageData + src->widthStep * m;
for(int n = 0; n < width; n++)
{
histogram[int(*p++)]++;
}
}

int threshold;
long sum0 = 0, sum1 = 0; //存储前景的灰度总和和背景灰度总和
long cnt0 = 0, cnt1 = 0; //前景的总个数和背景的总个数
double w0 = 0, w1 = 0; //前景和背景所占整幅图像的比例
double u0 = 0, u1 = 0; //前景和背景的平均灰度
double variance = 0; //最大类间方差
int i, j;
double u = 0;
double maxVariance = 0;
for(i = 1; i < 256; i++) //一次遍历每个像素
{
sum0 = 0;
sum1 = 0;
cnt0 = 0;
cnt1 = 0;
w0 = 0;
w1 = 0;
for(j = 0; j < i; j++)
{
cnt0 += histogram[j];
sum0 += j * histogram[j];
}

u0 = (double)sum0 / cnt0;
w0 = (double)cnt0 / size;

for(j = i ; j <= 255; j++)
{
cnt1 += histogram[j];
sum1 += j * histogram[j];
}

u1 = (double)sum1 / cnt1;
w1 = 1 - w0; // (double)cnt1 / size;

u = u0 * w0 + u1 * w1; //图像的平均灰度
printf("u = %f\n", u);
//variance = w0 * pow((u0 - u), 2) + w1 * pow((u1 - u), 2);
variance = w0 * w1 * (u0 - u1) * (u0 - u1);
if(variance > maxVariance)
{
maxVariance = variance;
threshold = i;
}
}

printf("threshold = %d\n", threshold);
return threshold;
}

㈡ 如何替换opencv人脸检测算法

我用摄像头打开480x640的窗口,然后使用OpenCV的人脸检测函数cvHaarDetectObjects进行人脸检测。函数配置如下:

faces = cvHaarDetectObjects( detectImg, (CvHaarClassifierCascade*)cascade, storage, search_scale_factor, 3, flags, minFeatureSize );

其中, search_scale_factor是1.1, flags = CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH; 也就是说只找一张人脸。 minFeatureSize是(20,20)。
这样的配置在有人脸的情况下可以实时检测,大概就是十几ms的样子

㈢ opencv算法怎么实现八邻域的标记

用cvRectangle()函数。
OpenCV里面的绘图函数函数功能: 通过对角线上的两个顶点绘制简单、指定粗细或者带填充的矩形函数原型:void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );参数介绍:img -- 图像.pt1 -- 矩形的一个顶点。pt2 -- 矩形对角线上的另一个顶点color -- 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。thickness -- 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。line_type -- 线条的类型。见cvLine的描述shift -- 坐标点的小数点位数。

㈣ opencv 中自带的模板匹配算法出处

方法如下:
使用OPENCV下SIFT库做图像匹配的例程
// opencv_empty_proj.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/features2d/features2d.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<vector>
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
const char* imagename = "img.jpg";

//从文件中读入图像
Mat img = imread(imagename);
Mat img2=imread("img2.jpg");

//如果读入图像失败
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if(img2.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//显示图像
imshow("image before", img);
imshow("image2 before",img2);
//sift特征检测
SiftFeatureDetector siftdtc;
vector<KeyPoint>kp1,kp2;
siftdtc.detect(img,kp1);
Mat outimg1;
drawKeypoints(img,kp1,outimg1);
imshow("image1 keypoints",outimg1);
KeyPoint kp;
vector<KeyPoint>::iterator itvc;
for(itvc=kp1.begin();itvc!=kp1.end();itvc++)
{
cout<<"angle:"<<itvc->angle<<"\t"<<itvc->class_id<<"\t"<<itvc->octave<<"\t"<<itvc->pt<<"\t"<<itvc->response<<endl;
}
siftdtc.detect(img2,kp2);
Mat outimg2;
drawKeypoints(img2,kp2,outimg2);
imshow("image2 keypoints",outimg2);
SiftDescriptorExtractor extractor;
Mat descriptor1,descriptor2;
BruteForceMatcher<L2<float>> matcher;
vector<DMatch> matches;
Mat img_matches;
extractor.compute(img,kp1,descriptor1);
extractor.compute(img2,kp2,descriptor2);
imshow("desc",descriptor1);
cout<<endl<<descriptor1<<endl;
matcher.match(descriptor1,descriptor2,matches);
drawMatches(img,kp1,img2,kp2,matches,img_matches);
imshow("matches",img_matches);
//此函数等待按键,按键盘任意键就返回
waitKey();
return 0;
}

㈤ opencv检测缺陷用哪些算法

根据不同的需求来进行不同的处理
1 空洞 这个肯定是像素颜色和周边的不同 建议用阈值分割 然后轮廓检测
2 褶皱 这个褶皱肯定会有梯度的变化 建议检测边缘 再计算褶皱的梯度信息
3 划痕 这个和上一个问题相似 但是也有不同 应该是梯度的方向和强度不同(一个是凹一个是凸)
4 斑点 如果只是点点星星的 opencv里也有很多角点检测算法 比如 surf fast ORB等

㈥ 求基于OpenCV的三帧差分算法代码

Detector虚类):实现前景检测,
2.团块检测模块(CvBlobDetector虚类):实现运动物体(团块)的的检测
3.团块跟踪模块(CvBlobTracker虚类):实现运动物体跟踪
4.团块运动轨迹产生模块(CvBlobTrackGen虚类):实现的功能与模块名字同(下同)
5.团块轨迹后处理模块(CvBlobTrackPostProc虚类)
6.团块轨迹分析模块(CvBlobTrackAnalysis虚类)
7.以及处理流程模块(cvBlobTrackerAuto虚类):此模块可看成胶水,集成上面的模块。

除了处理流程模块(因为它只控制流程呀~),每一个模块可以用多种算法实现,在程序中,这些算法就是函数。如(15-16行):
CvFGDetector* cvCreateFGDetector0()
CvFGDetector* cvCreateFGDetector0Simple()
CvFGDetector* cvCreateFGDetector1()
也就是说这三个函数都是能完成前景检测,具体用哪个,由你在main()函数中调用。
其他模块也是这样。
实现这些模块的类以及完成这些算法的函数都由OPENCV帮你实现了,blobtrack要做的就是在main()函数中调用这些函数,初始化函数参数以及各种变量。

㈦ 如何在opencv中使用层次聚类算法

如何在opencv中使用层次聚类算法
Invalidate只是放一个WM_PAINT消息在队列里,不做别的,所以只有当当前函数返回后,进入消息循环,取出WM_PAINT,才执行PAINT,所以不管Invalidate放哪里,都是最后的。

InvalidateRect(hWnd,&rect,TRUE);向hWnd窗体发出WM_PAINT的消息,强制客户区域重绘制,
rect是你指定要刷新的区域,此区域外的客户区域不被重绘,这样防止客户区域的一个局部的改动,而导致整个客户区域重绘而导致闪烁,如果最后的参数为TRUE,则还向窗体发送WM_ERASEBKGND消息,使背景重绘,当然在客户区域重绘之前。

㈧ 如何使用opencv中的NCC算法实现两幅图像的相似性判断

传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测和自动控制的首要环节。传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类。

㈨ opencv大部分算法使用了GPU吗

OpenCV的一些函数,如SURF,OpticalFlow,houghlines,提供了GPU加速版本,但是使用起来挺麻烦的,而且貌似效果没有宣传的那么好,你的这个程序应该是无GPU的。

㈩ opencv关于像素点的图像匹配算法

首先,建议你将图像中感兴趣区域(比如上图中的字母)取出来进行归一化,然后在进行匹配率计算。这是因为周围环境会对匹配率产生影响。
其次,建议你将匹配率算法改成Hausdorff距离https://en.wikipedia.org/wiki/Hausdorff,这样对图像有些平移什么的都不怎么敏感了。

热点内容
安卓上哪里下大型游戏 发布:2024-12-23 15:10:58 浏览:189
明日之后目前适用于什么配置 发布:2024-12-23 14:56:09 浏览:54
php全角半角 发布:2024-12-23 14:55:17 浏览:828
手机上传助手 发布:2024-12-23 14:55:14 浏览:732
什么样的主机配置吃鸡开全效 发布:2024-12-23 14:55:13 浏览:830
安卓我的世界114版本有什么 发布:2024-12-23 14:42:17 浏览:710
vbox源码 发布:2024-12-23 14:41:32 浏览:278
诗经是怎么存储 发布:2024-12-23 14:41:29 浏览:659
屏蔽视频广告脚本 发布:2024-12-23 14:41:24 浏览:419
php解析pdf 发布:2024-12-23 14:40:01 浏览:818