我写了以下代码
#include"opencv2/opencv.hpp"
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
main()
{
Mat img1,img2,sub,gray1,gray2,lab,ycbcr;
int v[3];
int row,col,i,j,t;
VideoCapture cap(0);
namedWindow("current");
cap>>img1;
sub=img1;
row=img1.rows;
col=img1.cols;
cvtColor(img1,gray1,CV_BGR2GRAY);
vector<vector<Point> > cont;
vector<Vec4i> hierarchy;
while (1) {
cap>>img2;
cvtColor(img2,gray2,CV_BGR2GRAY);
for(i=0;i<row;++i)
{
for (j=0; j<col; ++j)
{
if(abs(gray1.at<uchar>(i,j) - gray2.at<uchar>(i,j))>10)
{
sub.at<Vec3b>(i,j)[0] = img2.at<Vec3b>(i,j)[0];
sub.at<Vec3b>(i,j)[1] = img2.at<Vec3b>(i,j)[1];
sub.at<Vec3b>(i,j)[2] = img2.at<Vec3b>(i,j)[2];
}
else
{
sub.at<Vec3b>(i,j)[0]=0;
sub.at<Vec3b>(i,j)[1]=0;
sub.at<Vec3b>(i,j)[2]=0;
}
}
}
cvtColor(sub,ycbcr,CV_BGR2YCrCb);
inRange(ycbcr,Scalar(7,133,106),Scalar(255,178,129),ycbcr);
findContours(ycbcr,cont,hierarchy,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
Scalar color = CV_RGB(255,0,0);
for(int i1 = 0 ;i1 >= 0; i1 = hierarchy[i1][0] )
drawContours( ycbcr, cont, i1, color,2, CV_AA, hierarchy );
vector<Point2f > hullPoints;
// convexHull(Mat(cont),hullPoints,false);
imshow("current",ycbcr);
一 如果(waitKey(33)== 'Q') 打破; IMG1 = img2.clone(); }
}
1.)虽然我通过CV_RGB(255,0,0)指定了轮廓,但为什么轮廓没有显示为红色。 2.)当我取消注释该行 凸形轮廓(垫(续),hullPoints,FALSE); ,程序显示运行时错误。为什么会发生。任何人都可以告诉我convexHull()的确切格式 及其论点的含义
答案 0 :(得分:2)
1)尝试(0,0,255)红色。 OpenCV使用BGR格式。
2)要查找凸包,请尝试OpenCV tutorial.
中的代码在Convexhull上尝试类似的问题。 How to calculate convex hull area using openCV functions?
答案 1 :(得分:1)
您的hullPoints向量为空。如果检查向量的大小,则不会出现错误。
if(hullPoints.size() > 2) {
convexHull(....);
}