“cvRectangle”: 不能将参数 1 从“cv::Mat”转换为“CvArr *” 两个错误不会修改

xuxinqiujiao123 2012-09-11 02:01:39
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main( int argc, char**argv )
{
Mat src;
if( argc != 2 || !(src=imread("1.jpg", 1)).data)return -1;
Mat hsv;
cvtColor(src, hsv, CV_BGR2HSV);
// let’s quantize the hue to 30 levels
// and the saturation to 32 levels
int hbins = 30, sbins = 32;
int histSize[] = {hbins, sbins};
// hue varies from 0 to 179, see cvtColor
float hranges[] = { 0, 180 };
// saturation varies from 0 (black-gray-white) to
// 255 (pure spectrum color)
float sranges[] = { 0, 256 };
const float
*
ranges[] = { hranges, sranges };
MatND hist;
// we compute the histogram from the 0-th and 1-st channels
int channels[] = {0, 1};
calcHist( &hsv, 1, channels, Mat(), // do not use mask
hist, 2, histSize, ranges,
true, // the histogram is uniform
false );
double maxVal=0;
minMaxLoc(hist, 0, &maxVal, 0, 0);
int scale = 10;
Mat histImg = Mat::zeros(sbins
*
scale, hbins
*
10, CV_8UC3);
for( int h = 0; h < hbins; h++ )
for( int s = 0; s < sbins; s++ )
{
float binVal = hist.at<float>(h, s);
int intensity = cvRound(binVal*255/maxValue);
cvRectangle( histImg, Point(h*scale, s*scale),Point( (h+1)*scale - 1, (s+1)*scale - 1),Scalar::all(intensity),CV_FILLED );
}
namedWindow( "Source", 1 );
imshow( "Source", src );
namedWindow( "H-S Histogram", 1 );
imshow( "H-S Histogram", histImg );

waitKey();
return 0;
}

编译之后显示:

1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------
1>正在编译...
1>图片.cpp
1>d:\backup\我的文档\visual studio 2008\projects\test\test\图片.cpp(42) : error C2664: “cvRectangle”: 不能将参数 1 从“cv::Mat”转换为“CvArr *”
1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>生成日志保存在“file://d:\Backup\我的文档\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm”
1>test - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


不知道这两个错误该怎么改了哦···
...全文
1252 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdx04 2012-09-11
  • 打赏
  • 举报
回复
cvRectangle是OpenCV的C语言API,你应该用它的C++版本cv::rectangle
Gloveing 2012-09-11
  • 打赏
  • 举报
回复
cvRectangle( histImg, Point(h*scale, s*scale),Point( (h+1)*scale - 1, (s+1)*scale - 1),Scalar::all(intensity),CV_FILLED );
-----------------------
第一个参数使用错了

64,690

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧