psc = cv2.createShapeContextDistanceExtractor().computeDistance(contour, contour) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv_contrib\modules\shape\src\sc_dis.cpp:204: error: (-215:Assertion failed) (set1.channels()==2) && (set1.cols>0) in function 'cv::ShapeContextDistanceExtractorImpl::computeDistance'
时间: 2023-07-23 20:09:04 浏览: 48
这个错误可能是由于传递给 `computeDistance` 方法的轮廓 `contour` 格式不正确引起的。确保 `contour` 变量的形状是 `(N, 1, 2)`,其中 `N` 是轮廓点的数量。如果您已经使用 `cv2.findContours` 查找了轮廓,那么 `contour` 变量应该已经符合要求,否则您可以使用以下代码将其转换为正确的格式:
```
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contour = contours[0]
contour = contour.reshape(-1, 1, 2)
```
在上面的代码中,我们假设 `thresh` 是二值化后的图像,`cv2.RETR_EXTERNAL` 表示只查找最外层的轮廓,`cv2.CHAIN_APPROX_SIMPLE` 表示使用简单的逼近方法来压缩轮廓。
如果您仍然遇到问题,请检查您的 OpenCV 版本是否正确安装,并确保您的轮廓变量格式正确。
相关问题
Error: L6218E: Undefined symbol asm (referred from delay.o).
这个错误通常是由于编译器无法识别`asm`关键字导致的。在一些编译器中,`asm`并不是标准的关键字,而是作为一个扩展功能提供的。
为了解决这个问题,你可以尝试使用编译器支持的其他方式来实现延时,例如使用定时器或者系统提供的延时函数。以下是一个使用定时器的示例代码:
```c
#include "hk32f0xx.h"
void delay_us(uint32_t us)
{
// 使用定时器进行微秒级延时
TIM_TypeDef *timer = TIM14;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);
timer->PSC = (SystemCoreClock / 1000000) - 1;
timer->ARR = us - 1;
timer->CNT = 0;
timer->CR1 |= TIM_CR1_CEN;
while (!(timer->SR & TIM_SR_UIF)) {
// 等待定时器计数完成
}
timer->SR &= ~TIM_SR_UIF;
timer->CR1 &= ~TIM_CR1_CEN;
}
void delay_ms(uint32_t ms)
{
// 使用定时器进行毫秒级延时
while (ms--) {
delay_us(1000);
}
}
int main()
{
// 在这里调用延时函数进行延时
while (1) {
// 主程序循环
}
}
```
在上述代码中,我们使用了定时器TIM14来实现微秒级的延时,以及在`delay_ms()`函数中通过多次调用`delay_us()`函数来实现毫秒级的延时。
请注意,具体的定时器和寄存器配置可能需要根据HK32F030MF4P4的手册和芯片规格进行适当调整。
希望这能解决你的问题!如有其他疑问,请随时提问。
TIM_TimeBaseStructure.TIM_Prescaler =psc; 一般赋值为多少
这个值的大小需要根据具体的硬件设计和应用场景来确定。TIM_Prescaler 是一个用于预分频的参数,它会将输入时钟分频后作为计数器的时钟输入。具体的计算公式为:
计数器时钟频率 = 输入时钟频率 / (TIM_Prescaler + 1)
因此,TIM_Prescaler 的大小会影响计数器的时钟频率,从而影响计数器的计数速度和精度。一般来说,TIM_Prescaler 的值越大,计数器的时钟频率越低,计数速度越慢,但是精度越高。反之,TIM_Prescaler 的值越小,计数器的时钟频率越高,计数速度越快,但是精度越低。因此,需要根据具体的应用场景和硬件设计来确定 TIM_Prescaler 的大小,以达到最优的计数速度和精度。