- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在论文(文凭)中使用了 OpenCV 的 MeanShiftAlgorithm。 QT4.6中的Example运行良好。只有在我们自己的 GUI 应用程序中,我们收到一个 320x3x240 RGB 流,才会给它以下错误消息:
OpenCV Error: Assertion failed (j < nimages) in histPrepareImages, file /home/luca/OpenCvSDK/opencv-src/modules/imgproc/src/histogram.cpp, line 148
terminate called after throwing an instance of 'cv::Exception'
what(): /home/luca/OpenCvSDK/opencv-src/modules/imgproc/src/histogram.cpp:148: error: (-215) j < nimages in function histPrepareImages
GUI 在 Ubuntu 下用 Eclipse/QT4.6 编程。这是代码:
// Mean Shift Algorithm On
minSat=65;
ch[1]={0};
if (m_meanShiftAlgoOn)
{
if (m_firstFrame)
{
m_firstFrame = false;
// Define ROI
imageROI= m_currentFrame( cv::Rect(m_meanShift_xPos,m_meanShift_yPos,
m_meanShift_width,m_meanShift_height));
cv::rectangle(m_currentFrame, cv::Rect(m_meanShift_xPos,m_meanShift_yPos,m_meanShift_width,
m_meanShift_height),cv::Scalar(0,0,255));
// Get the Hue histogram
ColorHistogram hc;
cv::MatND colorhist= hc.getHueHistogram(imageROI,minSat);
finder.setHistogram(colorhist);
finder.setThreshold(0.2f);
// Convert to HSV space
cv::cvtColor(m_currentFrame, hsv, CV_BGR2HSV);
// Split the image
cv::split(hsv,v);
// Eliminate pixels with low saturation
cv::threshold(v[1],v[1],minSat,255,cv::THRESH_BINARY);
// for debug only: shows the frame with threshold
//m_currentFrame = v[1];
// Get back-projection of hue histogram
result1= finder.find(hsv,0.0f,180.0f,ch,1);
// for debug only: shows the frame with back-projection of hue histogram
//m_currentFrame = result1;
cv::bitwise_and(result1,v[1],result1);
// for debug only: shows the frame with bitwise_and of src1 and src2
//m_currentFrame = result1;
}
else
{
// Second frame
// Convert to HSV space
cv::cvtColor(m_currentFrame, hsv, CV_BGR2HSV);
// Split the frame
cv::split(hsv,v);
// Eliminate pixels with low saturation
cv::threshold(v[1],v[1],minSat,255,cv::THRESH_BINARY);
// for debug only: shows the frame with eliminated pixels with low saturation
//m_currentFrame = v[1];
// Get back-projection of hue histogram
result2= finder.find(hsv,0.0f,180.0f,ch,1); // here code crash
// for debug only: shows the frame with back-projection of hue histogram
//m_currentFrame = result2;
// Eliminate low stauration pixels
cv::bitwise_and(result2,v[1],result2);
// Get back-projection of hue histogram
finder.setThreshold(-1.0f);
result2= finder.find(hsv,0.0f,180.0f,ch,1);
cv::bitwise_and(result2,v[1],result2);
cv::Rect rect(m_meanShift_xPos,m_meanShift_yPos,m_meanShift_width,m_meanShift_height);
cv::rectangle(m_currentFrame, rect, cv::Scalar(0,0,255));
cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER,10,0.01);
cv::rectangle(m_currentFrame, rect, cv::Scalar(0,255,0));
}
}
else
m_firstFrame = true;
ROI 的参数是:
m_meanShift_xPos= 80
m_meanShift_yPos= 120
m_meanShift_width= 80
m_meanShift_height= 90
这里还是histogramm.cpp/LINE 1163文件中的函数(如错误信息所示)
static void histPrepareImages( const Mat* images, int nimages, const int* channels,
const Mat& mask, int dims, const int* histSize,
const float** ranges, bool uniform,
vector<uchar*>& ptrs, vector<int>& deltas,
Size& imsize, vector<double>& uniranges )
{
int i, j, c;
CV_Assert( channels != 0 || nimages == dims );
imsize = images[0].size();
int depth = images[0].depth(), esz1 = (int)images[0].elemSize1();
bool isContinuous = true;
ptrs.resize(dims + 1);
deltas.resize((dims + 1)*2);
for( i = 0; i < dims; i++ )
{
if(!channels)
{
j = i;
c = 0;
CV_Assert( images[j].channels() == 1 );
}
else
{
c = channels[i];
CV_Assert( c >= 0 );
for( j = 0; j < nimages; c -= images[j].channels(), j++ )
if( c < images[j].channels() )
break;
CV_Assert( j < nimages ); // line 148
}
CV_Assert( images[j].size() == imsize && images[j].depth() == depth );
if( !images[j].isContinuous() )
isContinuous = false;
ptrs[i] = images[j].data + c*esz1;
deltas[i*2] = images[j].channels();
deltas[i*2+1] = (int)(images[j].step/esz1 - imsize.width*deltas[i*2]);
}
if( mask.data )
{
CV_Assert( mask.size() == imsize && mask.channels() == 1 );
isContinuous = isContinuous && mask.isContinuous();
ptrs[dims] = mask.data;
deltas[dims*2] = 1;
deltas[dims*2 + 1] = (int)(mask.step/mask.elemSize1());
}
if( isContinuous )
{
imsize.width *= imsize.height;
imsize.height = 1;
}
if( !ranges )
{
CV_Assert( depth == CV_8U );
uniranges.resize( dims*2 );
for( i = 0; i < dims; i++ )
{
uniranges[i*2] = histSize[i]/256.;
uniranges[i*2+1] = 0;
}
}
else if( uniform )
{
uniranges.resize( dims*2 );
for( i = 0; i < dims; i++ )
{
CV_Assert( ranges[i] && ranges[i][0] < ranges[i][1] );
double low = ranges[i][0], high = ranges[i][1];
double t = histSize[i]/(high - low);
uniranges[i*2] = t;
uniranges[i*2+1] = -t*low;
}
}
else
{
for( i = 0; i < dims; i++ )
{
size_t j, n = histSize[i];
for( j = 0; j < n; j++ )
CV_Assert( ranges[i][j] < ranges[i][j+1] );
}
}
}
提前感谢您的任何回答...
最佳答案
对我来说,我不得不改变
img = cv2.imread('image.jpg', 0)
到
img = cv2.imread('image.jpg')
0
是一个 imreadModes要求 cv 以灰度模式读取图像。
关于OpenCV 错误 : Assertion failed (j < nimages),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10506823/
完整错误: OpenCV Error: Assertion failed (nimages > 0 && nimages == (int)imagePoints1.total() && (!imgPt
尝试在三 channel 图像上进行直方图反投影会导致以下错误: OpenCV Error: Assertion failed (j < nimages) in histPrepareImages,
我在论文(文凭)中使用了 OpenCV 的 MeanShiftAlgorithm。 QT4.6中的Example运行良好。只有在我们自己的 GUI 应用程序中,我们收到一个 320x3x240 RGB
我正在尝试根据 opencv 示例中给出的示例校准我的网络摄像头,但是当我运行此处提供的代码时: def caliLeftCam(): args, img_mask = getopt.g
我想用下面的代码找到相机校准常数。但是,我有一些我不知道的错误消息。请帮助我。 import cv2 import numpy as np import glob[enter image descri
我是一名优秀的程序员,十分优秀!