I holpe вы можете мне помочь. Я сейчас переводил некоторый код matlab в C++ с opencv, но он не работает ...Matlab convn in openCV
Теперь я не уверен, если это из-за моего неправильного перевода или если я пропустил что-то.
Matlab:
R=rmin:rmax;
count=size(R,2);
for k=1:count
[L(k)]=lineint(I,C,R(k),n,part);
if L(k)==0
L(k)=[];
break;
end
end
D=diff(L);
D=[0 D];
if strcmp(sigma,'inf')==1
f=ones(1,7)/7;
else
f=fspecial('gaussian',[1,5],sigma);
end
blur=convn(D,f,'same');%Smooths the D vecor by 1-D convolution
blur=abs(blur);
[b,i]=max(blur);
r=R(i);
b=blur(i);
OpenCV:
std::vector<double> L;
std::vector<int> radii;
std::vector<void*> result;
cv::Mat blur;
cv::Mat kernel;
for (int i = rmin; i <= rmax; i++) {
double tmp = lineint(I, C, i, n, part);
if (tmp != 0) {
L.push_back(tmp);
radii.push_back(i);
}
else
break;
}
std::vector<double> D;
D.push_back(0);
for (int i = 1; i < L.size(); i++) {
double tmp = L.at(i-1) - L.at(i);
D.push_back(tmp >= 0 ? tmp : -1 * tmp);
}
//inf case
if (sigma < -1) {
kernel = cv::Mat::ones(Size(1, 7), CV_32FC1)/7;
}
else {
kernel = cv::getGaussianKernel(5, sigma, CV_32FC1);
}
//flip vertical and horizontal
//rearange anchor
//http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html#filter2d
cv::flip(kernel, kernel, -1);
cv::Point anchor = cv::Point(-1, -1);
anchor = cv::Point(kernel.cols - anchor.x - 1, kernel.rows - anchor.y - 1);
cout << anchor << "|" << kernel << endl;
cv::filter2D(D, blur, -1, kernel, anchor, 0.0f, BORDER_DEFAULT);
blur = cv::abs(blur);
double min, max;
cv::Point min_loc, max_loc;
cv::minMaxLoc(blur, &min, &max, &min_loc, &max_loc);
int radius = (rmin + max_loc.y);
result.push_back(&max);
result.push_back(&radius);
Спасибо!
Редактировать: К сожалению пропустил сообщение об ошибке:
OpenCV Error: Assertion failed (anchor.inside(Rect(0, 0, ksize.width, ksize.height))) in cv::normalizeAnchor, file c:\builds\master_packslave-win64-vc12-shared\opencv\modules\imgproc\src\filterengine.hpp, line 363
Это происходит, когда я применить фильтр на filter2D
Edit2: Это работает, если удалить обновления свертке (удалить флип и перестановка анкера)
В чем проблема? Показать сообщение ошибки –
Что не работает? Можете ли вы указать конкретное сообщение об ошибке, которое вы видите? – Naytzyrhc
Извините, что забыл добавить сообщение, обновил сообщение –