Я работаю над проектом, который использует opencv на малине pi. Я столкнулся с барьером, который выглядит просто, но я не могу решить проблему. Прежде всего, здесь часть моего кода:Ошибка OpenCV: размеры входных аргументов не совпадают (операция не является «массивом op array»)
{
gray=cvarrToMat(py);
///cvShowImage("camcvWin", py); // display only gray channel
if(img_num%2 == 1)
{
cv::imwrite("/home/pi/test/Gray_2Image1.jpg",gray);
}
else if (img_num%2 == 0)
{
cv::imwrite("/home/pi/test/Gray_2Image2.jpg", gray);
cv::Mat img2 = cv::imread("/home/pi/test/Gray_2Image2.jpg", 0);
cv::Mat img1 = cv::imread("/home/pi/test/Gray_2Image1.jpg", 0);
diffImage = abs(img1-img2);
imshow("diffImage", diffImage);
cv::imwrite("/home/pi/test/Diffimage.jpg", diffImage);
}
img_num++;
Этот код не имеет никаких проблем. массив Размеры входных аргументов не совпадают (операция не является ни»: Однако, если изменить код, чтобы сделать небольшое изменение следующим образом:
{
gray=cvarrToMat(py);
///cvShowImage("camcvWin", py); // display only gray channel
if(img_num%2 == 1)
{
cv::imwrite("/home/pi/test/Gray_2Image1.jpg",gray);
cv::Mat img1 = cv::imread("/home/pi/test/Gray_2Image1.jpg", 0);
}
else if (img_num%2 == 0)
{
cv::imwrite("/home/pi/test/Gray_2Image2.jpg", gray);
cv::Mat img2 = cv::imread("/home/pi/test/Gray_2Image2.jpg", 0);
diffImage = abs(img1-img2);
imshow("diffImage", diffImage);
cv::imwrite("/home/pi/test/Diffimage.jpg", diffImage);
}
img_num++;
Я получаю следующее сообщение об ошибке:
OpenCV Ошибка op array '(где массивы имеют одинаковый размер и одинаковое количество каналов), а не' array op scalar ', а не' scalar op array ') в arithm_op, файл /home/pi/OpenCV-2.3.1/modules/core /src/arithm.cpp, строка 1253 завершение вызова после вызова экземпляра 'cv :: Exception' what(): /home/pi/OpenCV-2.3.1/modules/core/src/arithm.cpp:1253 : error: (-209) Операция не является «массивом op array» (w здесь массивы имеют одинаковый размер и одинаковое количество каналов), ни «массив op scalar», ни «scalar op array» в функции arithm_op
Я не в состоянии понять, что происходит. img1 и img2 объявляются глобально как Mat. Это может быть простая проблема, но я все еще новичок. Пожалуйста, помогите мне решить проблему. Спасибо за ваше время.
Теперь я получаю точку. Есть ли способ решить эту проблему? Как объявить img1 и img2 в двух разных условиях и использовать их без этой ошибки. Я объявил img1 и img2 как глобальную переменную, и нет локальных переменных с именами img1 и img2. –
Я отредактировал свой ответ, чтобы ответить на ваш комментарий. Обратите внимание, что вы не можете объявлять переменные в одной области и использовать их в другой, где первая не отображается. Это означает, что вы не можете объявить переменную в блоке if и использовать ее в блоке else, объявление должно быть видимым из блока, в котором вы используете переменную. В моем примере я использовал глобальную область, поэтому вы можете использовать переменные в любом if или else-блоке. Однако вы должны объявить переменные с минимальным объемом, который вам нужен. В примере, если вам не нужны img1 или img2 вне вашей функции, они должны быть лучше локальными. – ChronoTrigger
Как вы сказали, кажется, что единственный способ сделать это - это способ, упомянутый выше, который включает в себя одновременное считывание двух изображений в том же, если и еще. Большое спасибо за то, что вы поняли, как это работает. –