opencv代码集合

合集下载

双目视觉 opencv 代码

双目视觉 opencv 代码

双目视觉 opencv 代码双目视觉是指利用两个摄像头来获取场景的深度信息。

在OpenCV中,可以使用双目视觉进行立体视觉的处理。

下面我将从多个角度介绍如何使用OpenCV来实现双目视觉的代码。

1. 初始化摄像头:首先,你需要初始化两个摄像头,可以使用OpenCV的VideoCapture类来实现。

你可以通过以下代码来初始化两个摄像头:cv::VideoCapture cap1(0); // 打开第一个摄像头。

cv::VideoCapture cap2(1); // 打开第二个摄像头。

2. 获取图像:接下来,你需要从两个摄像头中获取图像。

你可以使用以下代码来获取图像:cv::Mat frame1, frame2;cap1 >> frame1; // 从第一个摄像头获取图像。

cap2 >> frame2; // 从第二个摄像头获取图像。

3. 立体校正:在进行立体视觉处理之前,通常需要进行立体校正,以确保两个摄像头的图像对齐。

你可以使用OpenCV中的stereoRectify和initUndistortRectifyMap函数来实现立体校正。

4. 视差计算:一旦完成立体校正,你可以使用OpenCV中的StereoBM或StereoSGBM类来计算图像的视差。

这些类实现了不同的立体匹配算法,可以帮助你计算出图像中不同像素的视差值。

5. 三维重构:最后,你可以使用视差图和立体校正参数来进行三维重构,从而获取场景的深度信息。

你可以使用reprojectImageTo3D函数来实现三维重构。

以上是使用OpenCV实现双目视觉的基本步骤和代码示例。

当然,双目视觉涉及到的内容非常广泛,包括摄像头标定、深度图像的可视化等等,还有很多细节需要考虑。

希望以上内容能够帮助你入门双目视觉的代码实现。

opencv入门代码

opencv入门代码

opencv入门代码(实用版)目录1.OpenCV 简介2.OpenCV 的安装与使用3.OpenCV 的基本图像处理4.OpenCV 的进阶功能5.OpenCV 的应用领域正文1.OpenCV 简介OpenCV,全称为 Open Source Computer Vision Library,是一个开源的计算机视觉库。

它可以用于图像处理、特征提取、目标检测以及机器学习等领域。

OpenCV 具有丰富的功能,可以帮助我们实现各种图像处理任务。

2.OpenCV 的安装与使用要使用 OpenCV,首先需要在计算机上安装它。

在 Ubuntu 系统中,可以使用以下命令进行安装:```sudo apt-get install python-opencv```安装完成后,可以通过编写 Python 代码来使用 OpenCV。

以下是一个简单的示例:```pythonimport cv2img = cv2.imread("test.jpg")cv2.imshow("Image", img)cv2.waitKey(0)cv2.destroyAllWindows()```这段代码首先使用`cv2.imread()`函数加载一张图片,然后使用`cv2.imshow()`函数显示图片,最后使用`cv2.destroyAllWindows()`函数关闭所有窗口。

3.OpenCV 的基本图像处理OpenCV 提供了丰富的图像处理功能,例如图像缩放、旋转、裁剪、滤波等。

以下是一个简单的示例,展示如何使用 OpenCV 进行图像缩放:```pythonimport cv2img = cv2.imread("test.jpg")resized = cv2.resize(img, (0, 0), fx=2, fy=2)cv2.imshow("Resized Image", resized)cv2.waitKey(0)cv2.destroyAllWindows()```这段代码首先加载一张图片,然后使用`cv2.resize()`函数进行图像缩放,最后显示缩放后的图片。

opencv相机标定代码

opencv相机标定代码

//// GenCaltab.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#include<opencv\cv.h>#include<opencv\highgui.h>#include<iostream>using namespace cv;using namespace std;typedef unsigned int uint;/*const string &*/void GenCaltab(const string &pathName, Mat &caltab/*string &outPathName*/, int width = 600, int height = 600, int cols = 20, int rows = 20) // 黑白的,單通道{Scalar color(0); // 背景色(全黑)caltab = Mat(height, width, CV_8UC1, color); // calibration table標定板(行*列對應於高*寬)//Mat caltab(height, width, CV_8UC1, color);int nWidthOfROI = int(width / float(cols));int imgHeight = caltab.rows;int imgWidth = caltab.cols;for (int j = 0; j < imgHeight; j++){uchar* data = caltab.ptr<uchar>(j);for (int i = 0; i < imgWidth; i++){if ((i / nWidthOfROI + j / nWidthOfROI) % 2){data[i] = 255; // 沒有三通道,單通道}}}Mat caltab1 = caltab.clone();imwrite(pathName, caltab);/*imshow("標定板", caltab);waitKey();*///outPathName = pathName;//return outPathName;}/*bool*/void CalibateCamera(Mat &image, Mat &cameraMatirx, Mat &distortionMat, vector<Mat> &rvecs, vector<Mat> &tvecs,int rows = 19, int cols = 19, float distance = 30, int flags = 0){// int cols = 10; int rows = 7; // 行列應該相等(正方形)// float distance = 30; // 標定板黑點間距為:30*30mm(內角點的間距,600/20 = 30)Size patternSize(cols, rows); // 標定板內每行或每列的內角點數:19*19 個(20-1)vector<Point2f> corners; // 角點(圖像平面還是成像平面????)vector<vector<Point2f>> cornersVect; // 角點矢量vector<Point3f> worldPoints; // 世界坐標點vector<vector<Point3f>> worldPointsVect; // 世界坐標點矢量for (int i = 0; i < cols; i++){for (int j = 0; j < rows; j++){// 此處是不是應該改一下?? ((i + 1) * distance, (j + 1) * distance, 0)worldPoints.push_back(Point3f(i * distance, j * distance, 0));// z = 0;//worldPoints.push_back(Point3f((i + 1) * distance, (j + 1) * distance, 0));// z = 0;}}// int *corner = NULL;bool find = findChessboardCorners(image, patternSize, corners); // 沒有找到角點!!!!(此時可行了)drawChessboardCorners(image, patternSize, corners, find); // 繪製棋盤角點// Mat cameraMatirx, distortionMat;// vector<Mat> rvecs, tvecs, rvecs2, tvecs2; // r:rotate(旋轉);t:transplant(平移)if (find){cornersVect.push_back(corners); // 沒有循環怎麼將數據壓入??worldPointsVect.push_back(worldPoints);calibrateCamera(worldPointsVect, cornersVect, image.size(), cameraMatirx, distortionMat, rvecs, tvecs);}/*imshow("", image);waitKey();*/}int_tmain(int argc, _TCHAR* argv[]){//string pathName = {'\0'};Mat caltab;GenCaltab("C:\\Users\\liyabin_sumeida\\Desktop\\1.jpg", caltab/*pathName*//*, 891, 630, 10, 7*/);//waitKey(0); // 按任意鍵caltab = imread("C:\\Users\\liyabin_sumeida\\Desktop\\1.jpg"); // (注釋以後)這樣雖然可行,但不是彩色的Mat cameraMatirx, distortionMat;vector<Mat> rvecs,tvecs;CalibateCamera(caltab, cameraMatirx, distortionMat, rvecs, tvecs /*, 7, 10, 90, 0*/);printf("相機內參數:\n");for (int i = 0; i < cameraMatirx.size().height; i++){uchar *data = cameraMatirx.ptr<uchar>(i);for (int j = 0; j < cameraMatirx.size().width; j++){printf("\t %d\n", data[j]);}}printf("畸變矩陣:\n");for (int i = 0; i < distortionMat.size().height; i++){uchar *data = distortionMat.ptr<uchar>(i);for (int j = 0; j < distortionMat.size().width; j++){printf("\t%d\n", data[j]);}}printf("相機外參數之旋轉矩陣:\n");for (uint i = 0; i < rvecs.size(); i++) // vector是三維的???{printf("第【%d】個矩陣的值:\n", i);Mat rMat = rvecs[i]; // 某一個矩陣for (int j = 0; j < rMat.size().height; j++){uchar *data = rMat.ptr<uchar>(j); // 指向某一行for (int k = 0; k < rMat.size().width; k++){printf(" %d\n", data[k]);;}}}printf("相機外參數之平移矩陣:\n");for (uint i = 0; i < tvecs.size(); i++) // vector是三維的???{printf("第【%d】個矩陣的值:\n", i);Mat rMat = tvecs[i]; // 某一個矩陣for (int j = 0; j < rMat.size().height; j++){uchar *data = rMat.ptr<uchar>(j); // 指向某一行for (int k = 0; k < rMat.size().width; k++){printf(" %d\n",data[k]);}}}imshow("標定圖像", caltab);waitKey();return 0;}。

opencv简单代码

opencv简单代码

(1)分配内存给一幅新图像IplImage*cvCreateImage(CvSizesize, int depth, int channels);size: cvSize(width,height);depth: 像素深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, channels: 像素通道数. Can be 1, 2, 3 or 4.示例:// Allocate a1-channel byte imageIplImage*img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);(2)释放图像IplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);cvReleaseImage(&img);(3)复制图像IplImage*img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);IplImage* img2;img2=cvCloneImage(img1);(4)从文件中读入图像IplImage*img=0;img=cvLoadImage(fileName);if(!img)printf("Couldnot load imagefile:%s\n",fileName);(5)头文件:#include <cv.h>#include <cvaux.h>#include <highgui.h>#include <cxcore.h> // 不必要- 该头文件已在cv.h 文件中包含(6)响应键盘事件:直接获取键盘操作:int key;key=cvWaitKey(10); // 输入等待10ms等待按键并获取键盘操作:int key;key=cvWaitKey(0); // 无限等待键盘输入键盘输入循环:while(1){key=cvWaitKey(10);if(key==27) break;switch(key){case 'h':...break;case 'i':...break;}}(7)图像转换转为灰度或彩色字节图像:cvConvertImage(src, dst, flags=0);src = float/byte grayscale/color imagedst = byte grayscale/color imageflags = CV_CVTIMG_FLIP (flip vertically)CV_CVTIMG_SWAP_RB (swap the R and B channels)转换彩色图像为灰度图像:使用OpenCV转换函数:cvCvtColor(cimg,gimg,CV_BGR2GRAY); // cimg -> gimg直接转换:for(i=0;i<cimg->height;i++) for(j=0;j<cimg->width;j++)gimgA[i][j]=(uchar)(cimgA[i][j].b*0.114+cimgA[i][j].g*0.587+cimgA[i][j].r*0.29;颜色空间转换:cvCvtColor(src,dst,code); // src -> dstcode = CV_<X>2<Y><X>/<Y> = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS e.g.: CV_BGR2GRAY, CV_BGR2HSV, CV_BGR2Lab(8)作业三的代码#include<string>#include<sstream>#include<cv.h>#include<highgui.h>using namespace std;using namespace cv;int main (){Mat second_pic;Mat result;String buffer;cout << "Input First Pic filename :";cin >> buffer;result = imread(buffer);cout << "Input Second Pic filename :";cin >> buffer;second_pic = imread(buffer);Mat mask(result.rows, result.cols, CV_32F);for(int i = 0 ; i < result.rows ; i++){for(int j = 0 ; j < result.cols ; j++){mask.at<float>(i, j) = fastAtan2(result.rows / 2 - i, j - result.cols / 2);}}int result_number;stringstream temp;cout << "How many results you want?";cin >> buffer;temp << buffer;temp >> result_number;for(int i = 0 ; i <= result_number ; ++i ){second_pic.copyTo(result, mask < i * 360.0 / result_number);imshow("Result", result);imshow("Mask", mask < i * 360.0 / result_number);cvWaitKey(0);temp.clear();temp << i;temp >> buffer;string temp_string = "result" + buffer + ".jpg";imwrite(temp_string, result);}}。

opencv所有函数汇总

opencv所有函数汇总

opencv所有函数汇总OpenCV是一个开放源代码的计算机视觉和机器学习软件库。

它拥有多种函数和方法,可用于处理图像和视频、目标检测、特征提取、图像分割、图像配准、机器学习等多个领域。

以下是一些常用的OpenCV函数的汇总:1. cv2.imread该函数读取图像文件,并返回一个NumPy数组,该数组表示图像的像素值。

2. cv2.imshow用于在窗口中显示图像。

3. cv2.imwrite将图像保存到指定的文件路径。

4. cv2.cvtColor用于将图像从一个颜色空间转换为另一个颜色空间。

5. cv2.resize可用于调整图像的大小。

6. cv2.flip用于翻转图像。

7. cv2.rectangle绘制矩形框。

8. cv2.circle绘制圆形。

9. cv2.line绘制线条。

10. cv2.putText在图像上绘制文本。

11. cv2.threshold将图像分割为黑白两个阈值。

12. cv2.adaptiveThreshold根据图像不同区域的光照条件对图像进行阈值处理。

13. cv2.medianBlur对图像进行中值滤波。

14. cv2.GaussianBlur对图像进行高斯模糊。

15. cv2.bilateralFilter对图像进行双边滤波。

16. cv2.contourArea计算轮廓的面积。

17. cv2.findContours找到图像中的轮廓。

18. cv2.drawContours在图像上绘制轮廓。

19. cv2.matchTemplate在图像中查找指定模板的匹配项。

20. cv2.HoughCircles在图像中检测圆。

21. cv2.HoughLines在图像中检测直线。

22. cv2.goodFeaturesToTrack在图像中寻找角点。

23. cv2.findHomography计算两个图像之间的单应性矩阵。

24. cv2.warpPerspective将图像进行透视变换。

OPENCV特征提取代码总结

OPENCV特征提取代码总结

OPENCV特征提取代码总结OpenCV是一个计算机视觉库,提供了许多用于图像处理和计算机视觉任务的函数和算法。

其中特征提取是OpenCV中一个非常重要的功能,它可以从图像中提取出能够表达图像特征的向量。

下面是几个常见的特征提取方法的代码总结。

1. Harris角点检测算法代码Harris角点检测算法是一种常用的角点检测算法,可以检测图像中的角点。

它的代码如下:```import cv2import numpy as npdef harris_corner_detector(image):gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#计算图像的梯度dx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3)dy = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3)# 计算Harris角点响应函数dx2 = cv2.multiply(dx, dx)dy2 = cv2.multiply(dy, dy)dxy = cv2.multiply(dx, dy)k=0.04det = cv2.subtract(cv2.multiply(dx2, dy2), cv2.multiply(dxy, dxy))trace = cv2.add(dx2, dy2)response = cv2.divide(det, trace + k)#寻找响应值大于阈值的角点corners = []threshold = 0.01for i in range(response.shape[0]):for j in range(response.shape[1]):if response[i, j] > threshold:corners.append(cv2.KeyPoint(j, i, 1, -1, response[i, j]))return corners# 调用Harris角点检测算法image = cv2.imread('image.jpg')corners = harris_corner_detector(image)#在图片上绘制出检测到的角点cv2.drawKeypoints(image, corners, image)cv2.imshow('image', image)cv2.waitKey(0)cv2.destroyAllWindows```2.SIFT特征提取算法代码SIFT(Scale-Invariant Feature Transform)是一种尺度不变的特征提取算法,可以提取出图像的关键点和对应的描述子。

OpenCV例程汇总

OpenCV例程汇总1.读取和显示图像:```cpp#include <opencv2/opencv.hpp>using namespace cv;int mainMat img = imread("image.jpg"); // 读取图像imshow("Image", img); // 显示图像waitKey(0); //等待按键return 0;```2.图像基本操作:```cpp#include <opencv2/opencv.hpp>using namespace cv;int mainMat img = imread("image.jpg"); // 读取图像Mat grayImg;cvtColor(img, grayImg, COLOR_BGR2GRAY); // 转换为灰度图像Mat resizedImg;resize(grayImg, resizedImg, Size(100, 100)); // 调整图像大小imwrite("gray_image.jpg", grayImg); // 保存灰度图像return 0;```3.图像滤波:```cpp#include <opencv2/opencv.hpp>using namespace cv;int mainMat img = imread("image.jpg"); // 读取图像Mat blurredImg;blur(img, blurredImg, Size(5, 5)); // 模糊图像Mat sharpenedImg;GaussianBlur(img, sharpenedImg, Size(0, 0), 3);addWeighted(img, 1.5, sharpenedImg, -0.5, 0, sharpenedImg); // 锐化图像return 0;```4.图像阈值处理:```cpp#include <opencv2/opencv.hpp>using namespace cv;int mainMat img = imread("image.jpg"); // 读取图像Mat grayImg;cvtColor(img, grayImg, COLOR_BGR2GRAY); // 转换为灰度图像Mat thresholdImg;threshold(grayImg, thresholdImg, 128, 255, THRESH_BINARY); // 二值化图像return 0;```5.边缘检测:```cpp#include <opencv2/opencv.hpp>using namespace cv;int mainMat img = imread("image.jpg"); // 读取图像Mat grayImg;cvtColor(img, grayImg, COLOR_BGR2GRAY); // 转换为灰度图像Mat edges;Canny(grayImg, edges, 50, 150); // 检测边缘return 0;```这些例程只是OpenCV提供的功能的一小部分,它还包含很多其他强大的功能,如形状识别、目标跟踪、特征提取等。

c语言opencv例程

c语言opencv例程OpenCV 是一个用于计算机视觉和机器学习的开源库,在 C 语言中,你可以通过调用OpenCV 的库函数来实现各种图像处理和计算机视觉任务。

以下为你提供一些 OpenCV 的 C 语言例程:- adaptiveskindetector.cpp:利用 HSV 空间的色调信息的皮肤检测,背景不能有太多与肤色相似的颜色。

- bagofwords_classification.cpp:目前还看不懂。

- bgfg_codebook.cpp:前后背景分离。

开启摄像头或读取视频。

- bgfg_gmg.cpp:摄像头捕捉,根据运动进行前后背景分离。

- bgfg_segm.cpp:高斯处理视频。

跟踪运动做前背景分割。

BackgroundSubtractorMOG2类。

- blobtrack_sample.cpp:视频跟踪。

跟踪视频中的运动物体,用绿色线框出。

- brief_match_test.cpp:利用 brief 描述算子匹配二维图像特征点。

- build3dmodel.cpp:建立三维模型。

根据给出的检测器对原始进行建模。

- calibration.cpp:相机外定标。

根据自带的函数提取角点后定标。

- calibration_artificial:根据角点自动校准摄像。

初始化后寻找角点再用calibrateCamera 校准。

- chamfer.cpp:图像匹配。

把图像二值后在目标图像中寻找模板图像。

主要调用chamerMatching 函数。

- contours.c:轮廓查找与获取。

cvFindContours 一个函数搞定。

- convert_cascade.c:从文件中装载训练好的级联分类器或者从 OpenCV 中嵌入的分类器数据库中导入,然后另存为一个文件。

- convexhull.cpp:凸包。

产生随机点后计算凸包。

- cout_mat.cpp:OpenCV 中矩阵的输出。

opencv的导入代码

opencv的导入代码在Python中,您可以使用以下代码导入OpenCV库:python复制代码importcv2这将导入OpenCV库,并将其命名为cv2。

现在,您可以使用cv2来调用OpenCV的各种函数和方法。

例如,以下代码将读取一张图像并显示它:python复制代码img =cv2.imread('image.jpg')cv2.imshow('Image', img)cv2.waitKey(0)cv2.destroyAllWindows()在上面的代码中,imread函数用于读取图像,imshow函数用于显示图像,waitKey函数等待用户按下键盘上的任意键,destroyAllWindows函数关闭所有打开的窗口。

除了使用常规的import语句导入OpenCV库,还有以下几种方法可以导入OpenCV:1.使用importlib模块:2.python复制代码import importlibopencv =importlib.import_module('cv2')通过这种方式,您可以导入OpenCV库并将其存储在名为opencv的变量中,然后使用该变量来调用OpenCV函数和方法。

3.使用动态导入:4.python复制代码from importlib importimport_moduleopencv = import_module('cv2')这种方法与第一种方法类似,但是使用import_module函数进行动态导入,并将其存储在名为opencv的变量中。

5.使用相对导入:如果您希望在同一个包内的不同模块之间进行导入,可以使用相对导入。

例如,假设您有一个名为my_package的包,其中包含一个名为my_module的模块,您可以使用以下代码在my_module中导入OpenCV:python复制代码from . importcv2这将从当前包的根目录导入OpenCV库,并将其存储在名为cv2的变量中。

opencv识别RGB颜色代码(转)

登录后才能查看或发表评论立即登录或者逛逛博客园首页
opencv识别 RGB颜色代码(转)
//检测RGB区域代码 #include "cv.h" #include "highgui.h" #include <math.h> #include <string.h> #include <iostream>
}
IplImage* pic=cvCreateImage( cvSize(img->width,img->height),8,1 ); cvNamedWindow( wndname, 1 ); cvShowImage(wndname,img);
findRGB(img,pic); cvNamedWindow("findRGB",1);
void findRGB(IplImage *img,IplImage *pic) { for(int x=0;x<img->height;x++) { for(int y=0;y<img->width;y++) {
if( ((uchar*)(img->imageData+x*img->widthStep))[y*img->nChannels+0]<30 //b &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 1]<30 //g &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 2]>150) //r CV_IMAGE_ELEM(pic,uchar,x,y)=255;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

修改图像各通道值
#define NULL 0
#include "highgui.h"
#include"cv.h"
#include<iostream>
using namespace cv;
int main(int argc,char** argv){
IplImage* img=cvLoadImage(“Sample2.jpg");
if(img==NULL)
exit(1);
cvNamedWindow("Fuck",CV_WINDOW_AUTOSIZE);
uchar *pchar;
int width=img->width; //读取图像宽度
int heigh=img->height; //读取图像高度
int channel=img->nChannels; //读取图像通道数
int widthStep=img->widthStep; //读取图像一行像素所占的字节数
int i,j;
for(i=0;i<heigh;i++)
{pchar = (uchar*)img->imageData + i*widthStep;
for(j=0;j<width;j++)
{
uchar*fuck=pchar+j*channel;
fuck[0]=0;
fuck[1]=0;
fuck[2]=0;
}
}
cvShowImage("Fuck",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Fuck");
return 0;
}
提取感兴趣的区域
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv[])
{
IplImage* img;
cvNamedWindow("fuck_post", CV_WINDOW_AUTOSIZE);
img=cvLoadImage("E:\\江-南?的Ì?悲À¡¥伤¦?\\创ä¡ä新?杯À-\\Opencv\\ImageSample2.bmp",1); if(img==NULL)
exit(1);
int x = atoi("200.0 ");
int y = atoi("200.0 ");
int width = atoi("200.0 ");
int height = atoi("200.0 ");
int add = atoi("100");
cvSetImageROI(img, cvRect(x,y,width,height));
cvAddS(img, cvScalar(add),img);
cvResetImageROI(img);
cvShowImage( "fuck_post",img);
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow("fuck_post");
return 0;
}。

相关文档
最新文档