#include "cv.h" #include "highgui.h" #include "cxcore.h" /*--------------copyright-hanshanbuleng--------------------*/ // 将色调H的取值范围转换到0~180之间 int main() { float H,S,V,H1,S1,V1; IplImage *src = cvLoadImage("F:\\vs2010program\\RGB_HSV\\study_test\\2.jpg", 1); IplImage *hsv_img = cvCreateImage(cvGetSize(src), 8 , 3); IplImage *h_img = cvCreateImage(cvGetSize(src), 8, 1); IplImage *s_img = cvCreateImage(cvGetSize(src), 8, 1); IplImage *v_img = cvCreateImage(cvGetSize(src), 8, 1); cvCvtColor(src, hsv_img, CV_BGR2HSV); cvSplit(hsv_img, h_img, s_img, v_img, NULL); for(int y = 0; y < hsv_img->height; y++){ for(int x = 0; x < hsv_img->width; x++) { H1 = cvGetReal2D(h_img, y, x); S1 = cvGetReal2D(s_img, y, x); V1 = cvGetReal2D(v_img, y, x); //地址法 H = (uchar)h_img->imageData[y*h_img->widthStep + x*h_img->nChannels]; S = (uchar)s_img->imageData[y*s_img->widthStep + x*s_img->nChannels]; V = (uchar)v_img->imageData[y*v_img->widthStep + x*v_img->nChannels]; printf("H:%f S:%f V:%f \n",H,S,V); } } cvNamedWindow("hsv_img", 0); //HSV图 cvShowImage("hsv_img", hsv_img); cvNamedWindow("h_img", 0); //H通道 cvShowImage("h_img", h_img); cvNamedWindow("s_img", 0); //S通道 cvShowImage("s_img", s_img); cvNamedWindow("v_img", 0); //V通道 cvShowImage("v_img", v_img); cvWaitKey(0); cvReleaseImage(&hsv_img); cvReleaseImage(&h_img); cvReleaseImage(&s_img); cvReleaseImage(&v_img); cvDestroyWindow("hsv_img"); cvDestroyWindow("h_img"); cvDestroyWindow("s_img"); cvDestroyWindow("v_img"); return 0; }
时间: 2024-04-20 16:24:16 浏览: 126
这段代码是使用OpenCV库进行图像处理的示例代码。它的主要功能是将一张图片从RGB颜色空间转换为HSV颜色空间,并分离出H、S、V通道的图像。
代码首先加载一张图片,然后创建4个IplImage类型的图像变量,分别用于存储HSV图像、H通道图像、S通道图像和V通道图像。
接下来,使用cvCvtColor函数将RGB图像转换为HSV图像。然后,使用cvSplit函数将HSV图像分离为H、S、V三个单通道的图像。
之后,使用两种方式获取每个像素点的H、S、V值。一种方式是使用cvGetReal2D函数,通过指定坐标获取每个通道的值。另一种方式是使用地址法,通过访问图像数据的内存地址来获取值。
最后,代码使用printf函数打印出每个像素点的H、S、V值,并显示分离后的H、S、V通道图像。
需要注意的是,这段代码中使用的OpenCV版本是旧版本,新版本中已经将IplImage类型替换为Mat类型。
相关问题
oipencv找不到<cxcore.h> <cv.h>头文件怎么解决
OpenCV 2.x 版本中使用的是 `<cv.h>` 和 `<cxcore.h>` 这两个头文件,但是在 OpenCV 3.x 版本中已经取消了这两个头文件,取而代之的是 `<opencv2/opencv.hpp>` 这个头文件。
如果你使用的是 OpenCV 2.x 版本,可以尝试以下方法:
1. 确认你的 OpenCV 安装路径是否正确,并且在编译时已经将 OpenCV 的库文件链接到了你的项目中。
2. 确认你的编译器是否能够找到 OpenCV 的头文件路径。可以在编译器的设置中添加 OpenCV 的头文件路径。
如果你使用的是 OpenCV 3.x 版本,可以使用以下头文件:
```c++
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
```
另外,如果你使用的是 CMake 进行编译,可以使用以下方式链接 OpenCV 库:
```cmake
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(your_project_name ${OpenCV_LIBS})
```
windows下的这些头文件:#include "cv.h" #include "cxcore.h" #include "highgui.h",在linux下对应
在Linux下,这些Windows特定的OpenCV(Computer Vision Library)头文件的对应路径可能会有所不同。在Linux环境,OpenCV通常会安装在`<opencv根目录>/include`下,头文件结构类似:
1. `cv.h`:在Linux中对应的可能是`opencv2/opencv.hpp`,这是OpenCV的主要头文件,包含了基本的数据类型、函数声明等。
2. `cxcore.h`:在Linux中对应的可能为`opencv2/core/cxcore.hpp`,这部分包含了一些核心的计算机视觉处理功能的定义。
3. `highgui.h`:在Linux中对应的应该是`opencv2/highgui/highgui.hpp`,它涉及到图像窗口和视频捕获的相关操作。
为了在Linux中引用这些头文件,你需要在项目的`CMakeLists.txt`或者其他构建配置文件中设置OpenCV的搜索路径,并将上述路径替换到`#include`指令中。例如:
```c++
#include <opencv2/opencv.hpp>
#include <opencv2/core/cxcore.hpp>
#include <opencv2/highgui/highgui.hpp>
```
阅读全文